> ## Documentation Index
> Fetch the complete documentation index at: https://clickhouse.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

> Агрегатная функция, которая выполняет повторную дискретизацию временных рядов по указанной сетке.

# timeSeriesResampleToGridWithStaleness

<div id="timeSeriesResampleToGridWithStaleness">
  ## timeSeriesResampleToGridWithStaleness
</div>

Добавленный в: v25.6.0

Агрегатная функция, которая принимает данные временных рядов в виде пар временных меток и значений и выполняет их повторную дискретизацию по регулярной временной сетке, задаваемой начальной временной меткой, конечной временной меткой и шагом. Для каждой точки сетки выбирается самый свежий образец в пределах указанного временного окна.

Псевдоним: `timeSeriesLastToGrid`.

<Warning>
  Эта функция экспериментальная; чтобы включить её, установите `allow_experimental_ts_to_grid_aggregate_function=true`.
</Warning>

**Синтаксис**

```sql theme={null}
timeSeriesResampleToGridWithStaleness(start_timestamp, end_timestamp, grid_step, staleness_window)(timestamp, value)
```

**Псевдонимы**: `timeSeriesLastToGrid`

**Параметры**

* `start_timestamp` — Задаёт начало сетки. [`UInt32`](/docs/ru/reference/data-types/int-uint) или [`DateTime`](/docs/ru/reference/data-types/datetime)
* `end_timestamp` — Задаёт конец сетки. [`UInt32`](/docs/ru/reference/data-types/int-uint) или [`DateTime`](/docs/ru/reference/data-types/datetime)
* `grid_step` — Задаёт шаг сетки в секундах. [`UInt32`](/docs/ru/reference/data-types/int-uint)
* `staleness_window` — Задаёт максимально допустимую устарелость последнего значения в секундах. [`UInt32`](/docs/ru/reference/data-types/int-uint)

**Аргументы**

* `timestamp` — Временная метка значения. Может быть отдельным значением или массивом значений. [`UInt32`](/docs/ru/reference/data-types/int-uint) или [`DateTime`](/docs/ru/reference/data-types/datetime) или [`Array(UInt32)`](/docs/ru/reference/data-types/array) или [`Array(DateTime)`](/docs/ru/reference/data-types/array)
* `value` — Значение временного ряда, соответствующее временной метке. Может быть отдельным значением или массивом значений. [`Float*`](/docs/ru/reference/data-types/float) или [`Array(Float*)`](/docs/ru/reference/data-types/array)

**Возвращаемое значение**

Возвращает значения временного ряда, для которых выполнена повторная дискретизация по указанной сетке. Возвращаемый массив содержит по одному значению для каждой точки временной сетки. Значение равно NULL, если для конкретной точки сетки нет соответствующего значения. [`Array(Nullable(Float64))`](/docs/ru/reference/data-types/array)

**Примеры**

**Базовое использование с отдельными парами «временная метка — значение»**

```sql title=Query theme={null}
SET allow_experimental_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 timeSeriesResampleToGridWithStaleness(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}
┌─timeSeriesResampleToGridWithStaleness(start_ts, end_ts, step_seconds, window_seconds)(timestamp, value)─┐
│ [NULL,NULL,1,3,4,4,NULL,5,8]                                                                            │
└─────────────────────────────────────────────────────────────────────────────────────────────────────────┘
```

**Использование массивов в качестве аргументов**

```sql title=Query theme={null}
SET allow_experimental_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 timeSeriesResampleToGridWithStaleness(start_ts, end_ts, step_seconds, window_seconds)(timestamps, values);
```

```response title=Response theme={null}
┌─timeSeriesResampleToGridWithStaleness(start_ts, end_ts, step_seconds, window_seconds)(timestamps, values)─┐
│ [NULL,NULL,1,3,4,4,NULL,5,8]                                                                              │
└───────────────────────────────────────────────────────────────────────────────────────────────────────────┘
```
