> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-mintlify-fbfa8bee.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> توثيق دالة النافذة nonNegativeDerivative

# nonNegativeDerivative

تحسب المشتقة غير السالبة لـ `metric_column` بالنسبة إلى `timestamp_column`.
هذه دالة نافذة خاصة بـ ClickHouse وليست جزءًا من معيار SQL.

لكل صف، تُحسب المشتقة بالنسبة إلى *الصف السابق في ترتيب تقييم النافذة*، الذي تحدده جملة `ORDER BY` الخاصة بالنافذة — لا `timestamp_column`.
يُستخدم الوسيط `timestamp_column` فقط لقياس الوقت المنقضي بين الصف الحالي والصف السابق؛ ولا يتحكم في ترتيب الصفوف بحد ذاته.

<Warning>
  لا تُرتّب `nonNegativeDerivative` الصفوف بواسطة `timestamp_column`؛ بل تتولى ذلك جملة `ORDER BY` الخاصة بالنافذة.
  لكي تنطبق الصيغة أدناه، يجب أن يكون `timestamp_column` متزايدًا تزايدًا صارمًا في ترتيب تقييم النافذة، لذا ينبغي في العادة ترتيب النافذة بواسطة `timestamp_column` تصاعديًا (على سبيل المثال `... OVER (ORDER BY ts ASC)` مع `nonNegativeDerivative(metric, ts)`).
  في كل مرة يكون فيها الوقت المنقضي بين الصف الحالي والصف السابق غير موجب — وهو ما يحدث عند استخدام `ORDER BY timestamp_column DESC` أو عند تكرار الطوابع الزمنية (تساويها) — تُعيد الدالة `0` لذلك الصف بدلًا من تطبيق الصيغة.
</Warning>

النتيجة هي معدل تغيّر المقياس لكل `INTERVAL`، مع تثبيت أي قيمة سالبة عند `0`.
يُفيد هذا في المقاييس المتزايدة بشكل رتيب، كالعدّادات، إذ يشير الانخفاض فيها عادةً إلى إعادة تعيين وليس إلى معدل سالب حقيقي.

**الصياغة**

```sql theme={null}
nonNegativeDerivative(metric_column, timestamp_column[, INTERVAL X UNITS])
  OVER ([[PARTITION BY grouping_column] [ORDER BY sorting_column]
        [ROWS or RANGE expression_to_bound_rows_within_the_group]] | [window_name])
FROM table_name
WINDOW window_name AS ([PARTITION BY grouping_column] [ORDER BY sorting_column] [ROWS or RANGE expression_to_bound_rows_within_the_group])
```

لمزيد من التفاصيل حول صياغة دوال النافذة، راجع: [دوال النافذة - الصياغة](/reference/functions/window-functions/index#syntax).

**الوسيطات**

* `metric_column` — العمود الذي تُحسب مشتقته. [(U)Int\*](/reference/data-types/int-uint) أو [Float\*](/reference/data-types/float).
* `timestamp_column` — العمود المستخدم لقياس الوقت المنقضي بين الصف الحالي والصف السابق في ترتيب النافذة. لا يتحكم في ترتيب الصفوف؛ بل تتولى ذلك جملة `ORDER BY` الخاصة بالنافذة، وينبغي عادةً أن تستخدم هذا العمود نفسه. [DateTime](/reference/data-types/datetime) أو [DateTime64](/reference/data-types/datetime64).
* `INTERVAL X UNITS` — اختياري. وحدة الزمن التي تُقاس إليها النتيجة. القيمة الافتراضية هي `INTERVAL 1 SECOND`. الوحدات ذات الطول الثابت فقط مدعومة (`NANOSECOND`، `MICROSECOND`، `MILLISECOND`، `SECOND`، `MINUTE`، `HOUR`، `DAY`، `WEEK`)؛ أما الوحدات متغيرة الطول (`MONTH`، `QUARTER`، `YEAR`) فتُطلق استثناءً.

**القيمة المُعادة**

لكل صف، تُحسب القيمة على النحو التالي:

* `0` للصف الأول؛
* `0` لأي صف يكون فيه الوقت المنقضي منذ الصف السابق غير موجب (أي $\text{timestamp}_i - \text{timestamp}_{i-1} \le 0$، كما يحدث مع الترتيب التنازلي أو الطوابع الزمنية المكررة)؛ و
* ${\text{metric}_i - \text{metric}_{i-1} \over \text{timestamp}_i - \text{timestamp}_{i-1}} * \text{interval}$ في جميع الحالات الأخرى.

إذا كانت القيمة المحسوبة سالبة، تُثبَّت عند `0`. نوع القيمة المُعادة هو [Float64](/reference/data-types/float).

**مثال**

يحسب المثال التالي معدل التغيّر في الثانية لقراءة مستشعر.
لاحظ أن الصف الثالث ينخفض من `110` إلى `105`، لذا تُثبَّت مشتقته عند `0`.

```sql title="Query" theme={null}
CREATE TABLE sensor_readings
(
    `sensor_id` UInt32,
    `ts`        DateTime,
    `reading`   Float64
)
ENGINE = Memory;

INSERT INTO sensor_readings VALUES
    (1, '2024-01-01 00:00:00', 100),
    (1, '2024-01-01 00:00:10', 110),
    (1, '2024-01-01 00:00:20', 105),
    (1, '2024-01-01 00:00:30', 130);
```

```sql title="Query" theme={null}
SELECT
    ts,
    reading,
    nonNegativeDerivative(reading, ts) OVER (ORDER BY ts ASC) AS deriv_per_second
FROM sensor_readings
ORDER BY ts ASC;
```

```response title="Response" theme={null}
   ┌──────────────────ts─┬─reading─┬─deriv_per_second─┐
1. │ 2024-01-01 00:00:00 │     100 │                0 │
2. │ 2024-01-01 00:00:10 │     110 │                1 │
3. │ 2024-01-01 00:00:20 │     105 │                0 │
4. │ 2024-01-01 00:00:30 │     130 │              2.5 │
   └─────────────────────┴─────────┴──────────────────┘
```
