---
slug: /zh/sql-reference/functions/time-window-functions
sidebar_position: 68
sidebar_label: 时间窗口
---

# 时间窗口函数 {#time-window-han-shu}

时间窗口函数用于获取窗口的起始(包含边界)和结束时间(不包含边界)。系统支持的时间窗口函数如下：

## tumble {#time-window-functions-tumble}

tumble窗口是连续的、不重叠的固定大小(`interval`)时间窗口。

``` sql
tumble(time_attr, interval [, timezone])
```

**参数**
- `time_attr` - [DateTime](../../sql-reference/data-types/datetime.md)类型的时间数据。
- `interval` - [Interval](../../sql-reference/data-types/special-data-types/interval.md)类型的窗口大小。
- `timezone` — [Timezone name](../../operations/server-configuration-parameters/settings.md#server_configuration_parameters-timezone) 类型的时区(可选参数). 

**返回值**

-  tumble窗口的开始(包含边界)和结束时间(不包含边界)

类型: `Tuple(DateTime, DateTime)`

**示例**

查询：

``` sql
SELECT tumble(now(), toIntervalDay('1'))
```

结果：

``` text
┌─tumble(now(), toIntervalDay('1'))─────────────┐
│ ['2020-01-01 00:00:00','2020-01-02 00:00:00'] │
└───────────────────────────────────────────────┘
```

## hop {#time-window-functions-hop}

hop窗口是一个固定大小(`window_interval`)的时间窗口，并按照一个固定的滑动间隔(`hop_interval`)滑动。当滑动间隔小于窗口大小时，滑动窗口间存在重叠，此时一个数据可能存在于多个窗口。

``` sql
hop(time_attr, hop_interval, window_interval [, timezone])
```

**参数**

- `time_attr` - [DateTime](../../sql-reference/data-types/datetime.md)类型的时间数据。
- `hop_interval` - [Interval](../../sql-reference/data-types/special-data-types/interval.md)类型的滑动间隔，需要大于0。
- `window_interval` - [Interval](../../sql-reference/data-types/special-data-types/interval.md)类型的窗口大小，需要大于0。
- `timezone` — [Timezone name](../../operations/server-configuration-parameters/settings.md#server_configuration_parameters-timezone) 类型的时区(可选参数)。

**返回值**

- hop窗口的开始(包含边界)和结束时间(不包含边界)。由于一个数据可能存在于多个窗口，脱离window view单独调用该函数时只返回第一个窗口数据。

类型: `Tuple(DateTime, DateTime)`

**示例**

查询：

``` sql
SELECT hop(now(), INTERVAL '1' SECOND, INTERVAL '2' SECOND)
```

结果：

``` text
┌─hop(now(), toIntervalSecond('1'), toIntervalSecond('2'))──┐
│ ('2020-01-14 16:58:22','2020-01-14 16:58:24')             │
└───────────────────────────────────────────────────────────┘
```

## tumbleStart {#time-window-functions-tumblestart}

返回tumble窗口的开始时间(包含边界)。

``` sql
tumbleStart(time_attr, interval [, timezone]);
```

## tumbleEnd {#time-window-functions-tumbleend}

返回tumble窗口的结束时间(不包含边界)。

``` sql
tumbleEnd(time_attr, interval [, timezone]);
```

## hopStart {#time-window-functions-hopstart}

返回hop窗口的开始时间(包含边界)。

``` sql
hopStart(time_attr, hop_interval, window_interval [, timezone]);
```

## hopEnd {#time-window-functions-hopend}

返回hop窗口的结束时间(不包含边界)。

``` sql
hopEnd(time_attr, hop_interval, window_interval [, timezone]);
```