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

> تحسب `ts_of_max_over_time` على غرار PromQL على شبكة زمنية منتظمة.

# timeSeriesTimestampOfMaxToGrid

<h2 id="timeSeriesTimestampOfMaxToGrid">
  timeSeriesTimestampOfMaxToGrid
</h2>

أُضيف في: v26.9.0

دالة تجميعية تستقبل بيانات السلاسل الزمنية على هيئة أزواج من الطوابع الزمنية والقيم، وتحسب منها [ts\_of\_max\_over\_time على غرار PromQL](https://prometheus.io/docs/prometheus/latest/querying/functions/#aggregation_over_time) على شبكة زمنية منتظمة يحددها طابع زمني للبداية وطابع زمني للنهاية وخطوة. ولكل نقطة على الشبكة، تكون النتيجة هي الطابع الزمني بالثواني لأحدث عينة تحمل القيمة القصوى ضمن النافذة الزمنية المحددة.

يمكن تمرير العينات بإحدى الصيغ الثلاث التالية:

* على هيئة وسيطتين `timestamp` و`value`، حيث يحتوي كل صف على عينة واحدة؛
* على هيئة مصفوفتين من الطوابع الزمنية والقيم، حيث يحتوي كل صف على سلسلة زمنية كاملة؛
* على هيئة مصفوفة واحدة من الصفوف المرتبة `(timestamp, value)`، حيث يحتوي كل صف على سلسلة زمنية كاملة.

تُتجاهل العينات ذات القيم NaN، ما لم تكن جميع العينات ضمن النافذة NaN.

إذا تشاركت عدة عينات الطابع الزمني نفسه، فلا تُستخدم إلا واحدة منها، وهي العينة ذات القيمة الأكبر. وتُعدّ القيمة NaN أصغر من أي قيمة أخرى، لذا لا تُستخدم إلا إذا كانت جميع العينات عند هذا الطابع الزمني NaN.

<Note>
  هذه الدالة في مرحلة المعاينة الخاصة، ويمكن تفعيلها بضبط الإعداد `enable_time_series_aggregate_functions=true`.
</Note>

**الصيغة**

```sql theme={null}
timeSeriesTimestampOfMaxToGrid(start_timestamp, end_timestamp, grid_step, staleness)(timestamp, value)
timeSeriesTimestampOfMaxToGrid(start_timestamp, end_timestamp, grid_step, staleness)(samples)
```

**المعلمات**

* `start_timestamp` — يحدد بداية الشبكة. ويمكن أن يكون أيضًا عددًا كسريًا، أو string تحتوي على رقم أو نص تاريخ ووقت. [`UInt32`](/ar/reference/data-types/int-uint) أو [`DateTime`](/ar/reference/data-types/datetime) أو [`DateTime64`](/ar/reference/data-types/datetime64) أو [`Float*`](/ar/reference/data-types/float) أو [`Decimal*`](/ar/reference/data-types/decimal) أو [`String`](/ar/reference/data-types/string)
* `end_timestamp` — يحدد نهاية الشبكة. ويمكن أن يكون أيضًا عددًا كسريًا، أو string تحتوي على رقم أو نص تاريخ ووقت. [`UInt32`](/ar/reference/data-types/int-uint) أو [`DateTime`](/ar/reference/data-types/datetime) أو [`DateTime64`](/ar/reference/data-types/datetime64) أو [`Float*`](/ar/reference/data-types/float) أو [`Decimal*`](/ar/reference/data-types/decimal) أو [`String`](/ar/reference/data-types/string)
* `grid_step` — يحدد خطوة الشبكة بالثواني. ويمكن أن يكون أيضًا عددًا كسريًا، أو string تحتوي على رقم أو مدة مثل '15s' أو '1m'. [`UInt32`](/ar/reference/data-types/int-uint) أو [`Float*`](/ar/reference/data-types/float) أو [`Decimal*`](/ar/reference/data-types/decimal) أو [`String`](/ar/reference/data-types/string)
* `staleness` — يحدد الحد الأقصى لـ"التقادم" بالثواني للعينات التي تؤخذ في الحسبان. نافذة التقادم فاصل زمني مفتوح من اليسار ومغلق من اليمين. ويمكن أن يكون أيضًا عددًا كسريًا، أو string تحتوي على رقم أو مدة مثل '15s' أو '1m'. [`UInt32`](/ar/reference/data-types/int-uint) أو [`Float*`](/ar/reference/data-types/float) أو [`Decimal*`](/ar/reference/data-types/decimal) أو [`String`](/ar/reference/data-types/string)

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

* `timestamp` — الطابع الزمني للعينة. يمكن أن يكون قيمًا مفردة أو مصفوفات. [`UInt32`](/ar/reference/data-types/int-uint) أو [`DateTime`](/ar/reference/data-types/datetime) أو [`DateTime64`](/ar/reference/data-types/datetime64) أو [`Array(UInt32)`](/ar/reference/data-types/array) أو [`Array(DateTime)`](/ar/reference/data-types/array) أو [`Array(DateTime64)`](/ar/reference/data-types/array)
* `value` — قيمة السلسلة الزمنية المقابلة للطابع الزمني. يمكن أن تكون قيمًا مفردة أو مصفوفات. [`Float*`](/ar/reference/data-types/float) أو [`Array(Float*)`](/ar/reference/data-types/array)
* `samples` — عينات السلسلة الزمنية مُمرَّرةً على شكل مصفوفة من الصفوف المرتبة `(timestamp, value)`، حيث تكون عناصر الـ Tuple من نوعَي الطابع الزمني والقيمة المذكورين أعلاه. وهي بديل عن تمرير الطوابع الزمنية والقيم كوسيطتين منفصلتين. [`Array(Tuple(T1, T2))`](/ar/reference/data-types/array)

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

قيم `ts_of_max_over_time` على الشبكة المحددة: الطوابع الزمنية للقيم القصوى، وهي من نوع `timestamp` نفسه. تحتوي المصفوفة المُعادة على قيمة واحدة لكل نقطة من نقاط الشبكة الزمنية. وتكون القيمة NULL إذا لم توجد أي عينات ضمن النافذة لنقطة معينة من نقاط الشبكة. [`Array(Nullable(UInt32))`](/ar/reference/data-types/array) أو [`Array(Nullable(DateTime))`](/ar/reference/data-types/array) أو [`Array(Nullable(DateTime64))`](/ar/reference/data-types/array)

**أمثلة**

**حساب قيم ts\_of\_max\_over\_time على الشبكة \[90, 105, 120, 135, 150, 165, 180, 195, 210, 225]**

```sql title=Query theme={null}
SET enable_time_series_aggregate_functions = 1;
WITH
    -- NOTE: the gap between 130 and 190 is to show how values are filled for ts = 180 according to window parameter
    [110, 120, 130, 190, 200, 210, 220, 230]::Array(DateTime) AS timestamps,
    [1, 3, 2, 6, 6, 4, 2, 0]::Array(Float32) AS values, -- array of values corresponding to timestamps above
    90 AS start_ts,       -- start of timestamp grid
    90 + 135 AS end_ts,   -- end of timestamp grid
    15 AS step_seconds,   -- step of timestamp grid
    45 AS window_seconds  -- "staleness" window
SELECT timeSeriesTimestampOfMaxToGrid(start_ts, end_ts, step_seconds, window_seconds)(timestamp, value)
FROM
(
    -- This subquery converts arrays of timestamps and values into rows of `timestamp`, `value`
    SELECT
        arrayJoin(arrayZip(timestamps, values)) AS ts_and_val,
        ts_and_val.1 AS timestamp,
        ts_and_val.2 AS value
);
```

```response title=Response theme={null}
┌─timeSeriesTimestampOfMaxToGrid(start_ts, end_ts, step_seconds, window_seconds)(timestamp, value)───────────────────────────────────────────────────────────────────────────┐
│ [NULL,NULL,'1970-01-01 00:02:00','1970-01-01 00:02:00','1970-01-01 00:02:00','1970-01-01 00:02:10',NULL,'1970-01-01 00:03:10','1970-01-01 00:03:20','1970-01-01 00:03:20'] │
└────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
```

**الاستعلام نفسه مع وسيطات من نوع مصفوفة**

```sql title=Query theme={null}
SET enable_time_series_aggregate_functions = 1;
WITH
    [110, 120, 130, 190, 200, 210, 220, 230]::Array(DateTime) AS timestamps,
    [1, 3, 2, 6, 6, 4, 2, 0]::Array(Float32) AS values,
    90 AS start_ts,
    90 + 135 AS end_ts,
    15 AS step_seconds,
    45 AS window_seconds
SELECT timeSeriesTimestampOfMaxToGrid(start_ts, end_ts, step_seconds, window_seconds)(timestamps, values);
```

```response title=Response theme={null}
┌─timeSeriesTimestampOfMaxToGrid(start_ts, end_ts, step_seconds, window_seconds)(timestamps, values)─────────────────────────────────────────────────────────────────────────┐
│ [NULL,NULL,'1970-01-01 00:02:00','1970-01-01 00:02:00','1970-01-01 00:02:00','1970-01-01 00:02:10',NULL,'1970-01-01 00:03:10','1970-01-01 00:03:20','1970-01-01 00:03:20'] │
└────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
```
