ClickHouse/docs/en/sql-reference/functions/time-window-functions.md

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

249 lines
8.1 KiB
Markdown
Raw Normal View History

2021-12-07 13:35:30 +00:00
---
2022-08-28 14:53:34 +00:00
slug: /en/sql-reference/functions/time-window-functions
2023-04-19 17:05:55 +00:00
sidebar_position: 175
sidebar_label: Time Window
2021-12-07 13:35:30 +00:00
---
2022-06-02 10:55:18 +00:00
# Time Window Functions
2021-12-07 13:35:30 +00:00
2024-07-04 16:02:10 +00:00
Time window functions return the inclusive lower and exclusive upper bound of the corresponding window. The functions for working with [WindowView](../statements/create/view.md/#window-view-experimental) are listed below:
2021-12-07 13:35:30 +00:00
2022-06-02 10:55:18 +00:00
## tumble
2021-12-07 13:35:30 +00:00
2024-09-22 14:43:26 +00:00
A tumbling time window assigns records to non-overlapping, continuous windows with a fixed duration (`interval`).
2021-12-07 13:35:30 +00:00
2024-07-04 16:02:10 +00:00
**Syntax**
2021-12-07 13:35:30 +00:00
``` sql
tumble(time_attr, interval [, timezone])
```
**Arguments**
2024-07-04 16:02:10 +00:00
- `time_attr` — Date and time. [DateTime](../data-types/datetime.md).
- `interval` — Window interval in [Interval](../data-types/special-data-types/interval.md).
2024-09-22 14:43:26 +00:00
- `timezone` — [Timezone name](../../operations/server-configuration-parameters/settings.md#timezone) (optional).
2021-12-07 13:35:30 +00:00
**Returned values**
2024-07-04 16:02:10 +00:00
- The inclusive lower and exclusive upper bound of the corresponding tumbling window. [Tuple](../data-types/tuple.md)([DateTime](../data-types/datetime.md), [DateTime](../data-types/datetime.md)).
2021-12-07 13:35:30 +00:00
**Example**
Query:
``` sql
2024-07-04 16:02:10 +00:00
SELECT tumble(now(), toIntervalDay('1'));
2021-12-07 13:35:30 +00:00
```
Result:
``` text
┌─tumble(now(), toIntervalDay('1'))─────────────┐
2024-07-04 16:02:10 +00:00
│ ('2024-07-04 00:00:00','2024-07-05 00:00:00') │
2021-12-07 13:35:30 +00:00
└───────────────────────────────────────────────┘
```
2024-07-04 16:02:10 +00:00
## tumbleStart
2021-12-07 13:35:30 +00:00
2024-07-04 16:02:10 +00:00
Returns the inclusive lower bound of the corresponding [tumbling window](#tumble).
**Syntax**
2021-12-07 13:35:30 +00:00
``` sql
2024-07-04 16:02:10 +00:00
tumbleStart(time_attr, interval [, timezone]);
2021-12-07 13:35:30 +00:00
```
**Arguments**
2024-07-04 16:02:10 +00:00
- `time_attr` — Date and time. [DateTime](../data-types/datetime.md).
- `interval` — Window interval in [Interval](../data-types/special-data-types/interval.md).
2024-09-22 14:43:26 +00:00
- `timezone` — [Timezone name](../../operations/server-configuration-parameters/settings.md#timezone) (optional).
2021-12-07 13:35:30 +00:00
The parameters above can also be passed to the function as a [tuple](../data-types/tuple.md).
2021-12-07 13:35:30 +00:00
**Returned values**
2024-07-04 16:02:10 +00:00
- The inclusive lower bound of the corresponding tumbling window. [DateTime](../data-types/datetime.md), [Tuple](../data-types/tuple.md) or [UInt32](../data-types/int-uint.md).
2021-12-07 13:35:30 +00:00
**Example**
Query:
2024-07-04 16:02:10 +00:00
```sql
SELECT tumbleStart(now(), toIntervalDay('1'));
```
Result:
```response
┌─tumbleStart(now(), toIntervalDay('1'))─┐
│ 2024-07-04 00:00:00 │
└────────────────────────────────────────┘
```
## tumbleEnd
Returns the exclusive upper bound of the corresponding [tumbling window](#tumble).
**Syntax**
2021-12-07 13:35:30 +00:00
``` sql
2024-07-04 16:02:10 +00:00
tumbleEnd(time_attr, interval [, timezone]);
```
**Arguments**
- `time_attr` — Date and time. [DateTime](../data-types/datetime.md).
- `interval` — Window interval in [Interval](../data-types/special-data-types/interval.md).
2024-09-22 14:43:26 +00:00
- `timezone` — [Timezone name](../../operations/server-configuration-parameters/settings.md#timezone) (optional).
2024-07-04 16:02:10 +00:00
The parameters above can also be passed to the function as a [tuple](../data-types/tuple.md).
2024-07-04 16:02:10 +00:00
**Returned values**
- The inclusive lower bound of the corresponding tumbling window. [DateTime](../data-types/datetime.md), [Tuple](../data-types/tuple.md) or [UInt32](../data-types/int-uint.md).
**Example**
Query:
```sql
SELECT tumbleEnd(now(), toIntervalDay('1'));
2021-12-07 13:35:30 +00:00
```
Result:
2024-07-04 16:02:10 +00:00
```response
┌─tumbleEnd(now(), toIntervalDay('1'))─┐
│ 2024-07-05 00:00:00 │
└──────────────────────────────────────┘
2021-12-07 13:35:30 +00:00
```
2024-07-04 16:02:10 +00:00
## hop
2021-12-07 13:35:30 +00:00
2024-07-04 16:02:10 +00:00
A hopping time window has a fixed duration (`window_interval`) and hops by a specified hop interval (`hop_interval`). If the `hop_interval` is smaller than the `window_interval`, hopping windows are overlapping. Thus, records can be assigned to multiple windows.
2021-12-07 13:35:30 +00:00
``` sql
2024-07-04 16:02:10 +00:00
hop(time_attr, hop_interval, window_interval [, timezone])
2021-12-07 13:35:30 +00:00
```
2024-07-04 16:02:10 +00:00
**Arguments**
- `time_attr` — Date and time. [DateTime](../data-types/datetime.md).
- `hop_interval` — Positive Hop interval. [Interval](../data-types/special-data-types/interval.md).
- `window_interval` — Positive Window interval. [Interval](../data-types/special-data-types/interval.md).
2024-09-22 14:43:26 +00:00
- `timezone` — [Timezone name](../../operations/server-configuration-parameters/settings.md#timezone) (optional).
2021-12-07 13:35:30 +00:00
2024-07-04 16:02:10 +00:00
**Returned values**
- The inclusive lower and exclusive upper bound of the corresponding hopping window. [Tuple](../data-types/tuple.md)([DateTime](../data-types/datetime.md), [DateTime](../data-types/datetime.md))`.
:::note
Since one record can be assigned to multiple hop windows, the function only returns the bound of the **first** window when hop function is used **without** `WINDOW VIEW`.
:::
**Example**
Query:
2021-12-07 13:35:30 +00:00
``` sql
2024-07-04 16:02:10 +00:00
SELECT hop(now(), INTERVAL '1' DAY, INTERVAL '2' DAY);
```
Result:
``` text
┌─hop(now(), toIntervalDay('1'), toIntervalDay('2'))─┐
│ ('2024-07-03 00:00:00','2024-07-05 00:00:00') │
└────────────────────────────────────────────────────┘
2021-12-07 13:35:30 +00:00
```
2022-06-02 10:55:18 +00:00
## hopStart
2021-12-07 13:35:30 +00:00
2024-07-04 16:02:10 +00:00
Returns the inclusive lower bound of the corresponding [hopping window](#hop).
**Syntax**
2021-12-07 13:35:30 +00:00
``` sql
hopStart(time_attr, hop_interval, window_interval [, timezone]);
```
2024-07-04 16:02:10 +00:00
**Arguments**
- `time_attr` — Date and time. [DateTime](../data-types/datetime.md).
- `hop_interval` — Positive Hop interval. [Interval](../data-types/special-data-types/interval.md).
- `window_interval` — Positive Window interval. [Interval](../data-types/special-data-types/interval.md).
2024-09-22 14:43:26 +00:00
- `timezone` — [Timezone name](../../operations/server-configuration-parameters/settings.md#timezone) (optional).
2024-07-04 16:02:10 +00:00
The parameters above can also be passed to the function as a [tuple](../data-types/tuple.md).
2024-07-04 16:02:10 +00:00
**Returned values**
- The inclusive lower bound of the corresponding hopping window. [DateTime](../data-types/datetime.md), [Tuple](../data-types/tuple.md) or [UInt32](../data-types/int-uint.md).
:::note
Since one record can be assigned to multiple hop windows, the function only returns the bound of the **first** window when hop function is used **without** `WINDOW VIEW`.
:::
**Example**
Query:
``` sql
SELECT hopStart(now(), INTERVAL '1' DAY, INTERVAL '2' DAY);
```
Result:
``` text
┌─hopStart(now(), toIntervalDay('1'), toIntervalDay('2'))─┐
│ 2024-07-03 00:00:00 │
└─────────────────────────────────────────────────────────┘
```
2021-12-07 13:35:30 +00:00
2022-06-02 10:55:18 +00:00
## hopEnd
2021-12-07 13:35:30 +00:00
2024-07-04 16:02:10 +00:00
Returns the exclusive upper bound of the corresponding [hopping window](#hop).
**Syntax**
2021-12-07 13:35:30 +00:00
``` sql
hopEnd(time_attr, hop_interval, window_interval [, timezone]);
2022-05-03 17:12:42 +00:00
```
2024-07-04 16:02:10 +00:00
**Arguments**
- `time_attr` — Date and time. [DateTime](../data-types/datetime.md).
2024-09-22 14:43:26 +00:00
- `hop_interval` — Positive Hop interval. [Interval](../data-types/special-data-types/interval.md).
2024-07-04 16:02:10 +00:00
- `window_interval` — Positive Window interval. [Interval](../data-types/special-data-types/interval.md).
2024-09-22 14:43:26 +00:00
- `timezone` — [Timezone name](../../operations/server-configuration-parameters/settings.md#timezone) (optional).
2024-07-04 16:02:10 +00:00
The parameters above can also be passed to the function as a [tuple](../data-types/tuple.md).
2024-07-04 16:02:10 +00:00
**Returned values**
- The exclusive upper bound of the corresponding hopping window. [DateTime](../data-types/datetime.md), [Tuple](../data-types/tuple.md) or [UInt32](../data-types/int-uint.md).
:::note
Since one record can be assigned to multiple hop windows, the function only returns the bound of the **first** window when hop function is used **without** `WINDOW VIEW`.
:::
**Example**
Query:
``` sql
SELECT hopEnd(now(), INTERVAL '1' DAY, INTERVAL '2' DAY);
```
Result:
``` text
┌─hopEnd(now(), toIntervalDay('1'), toIntervalDay('2'))─┐
│ 2024-07-05 00:00:00 │
└───────────────────────────────────────────────────────┘
2024-07-04 16:02:10 +00:00
```
2023-01-17 15:38:10 +00:00
## Related content
2023-04-19 17:05:55 +00:00
- Blog: [Working with time series data in ClickHouse](https://clickhouse.com/blog/working-with-time-series-data-and-functions-ClickHouse)