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

> تحسب الدالة `ts_of_last_over_time` المشابهة لـ PromQL على شبكة زمنية منتظمة.

# timeSeriesTimestampOfLastToGrid

<h2 id="timeSeriesTimestampOfLastToGrid">
  timeSeriesTimestampOfLastToGrid
</h2>

أُضيف في: v26.10.0

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

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

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

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

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

**الصيغة**

```sql theme={null}
timeSeriesTimestampOfLastToGrid(start_timestamp, end_timestamp, grid_step, staleness_window)(timestamp, value)
timeSeriesTimestampOfLastToGrid(start_timestamp, end_timestamp, grid_step, staleness_window)(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_window` — يحدد أقصى مدة تقادم مسموح بها لأحدث عينة، بالثواني. ويمكن أن يكون أيضًا عددًا كسريًا، أو 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` — عينات السلسلة الزمنية، وتُمرَّر على هيئة مصفوفة من عناصر Tuple بالشكل `(timestamp, value)`، بحيث تكون عناصر Tuple من أنواع الطابع الزمني والقيمة المذكورة أعلاه. وتُعدّ بديلًا عن تمرير الطوابع الزمنية والقيم في وسيطتين منفصلتين. [`Array(Tuple(T1, T2))`](/ar/reference/data-types/array)

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

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

**أمثلة**

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

```sql title=Query theme={null}
SET enable_time_series_aggregate_functions = 1;
WITH
    -- NOTE: the gap between 140 and 190 is to show how values are filled for ts = 150, 165, 180 according to staleness window parameter
    [110, 120, 130, 140, 190, 200, 210, 220, 230]::Array(DateTime) AS timestamps,
    [1, 1, 3, 4, 5, 5, 8, 12, 13]::Array(Float32) AS values, -- array of values corresponding to timestamps above
    90 AS start_ts,       -- start of timestamp grid
    90 + 120 AS end_ts,   -- end of timestamp grid
    15 AS step_seconds,   -- step of timestamp grid
    30 AS window_seconds  -- "staleness" window
SELECT timeSeriesTimestampOfLastToGrid(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}
┌─timeSeriesTimestampOfLastToGrid(start_ts, end_ts, step_seconds, window_seconds)(timestamp, value)────────────────────────────────────────────────────┐
│ [NULL,NULL,'1970-01-01 00:02:00','1970-01-01 00:02:10','1970-01-01 00:02:20','1970-01-01 00:02:20',NULL,'1970-01-01 00:03:10','1970-01-01 00:03:30'] │
└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
```

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

```sql title=Query theme={null}
SET enable_time_series_aggregate_functions = 1;
WITH
    [110, 120, 130, 140, 190, 200, 210, 220, 230]::Array(DateTime) AS timestamps,
    [1, 1, 3, 4, 5, 5, 8, 12, 13]::Array(Float32) AS values,
    90 AS start_ts,
    90 + 120 AS end_ts,
    15 AS step_seconds,
    30 AS window_seconds
SELECT timeSeriesTimestampOfLastToGrid(start_ts, end_ts, step_seconds, window_seconds)(timestamps, values);
```

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