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

> 时间窗口函数的文档

# 时间窗口函数

export const CloudNotSupportedBadge = () => {
  return <div className="cloudNotSupportedBadge">
            <div className="cloudNotSupportedIcon">
            <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
                <path strokeWidth="1.5" d="M6.33366 12.6666L12.3739 12.6667C13.6593 12.6667 14.7073 11.6187 14.7073 10.3334C14.7073 9.04804 13.6593 8.00003 12.3739 8.00003C12.3739 8.00003 12.3337 7.66659 12.0003 7.33325M10.667 5.33322C8.00033 2.33325 4.45395 4.78537 4.14195 6.68203C2.55728 6.7627 1.29395 8.06203 1.29395 9.6667C1.29395 11.3234 2.66699 12.6666 4.00033 12.6666" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
                <path strokeWidth="1.5" d="M2.66699 14L12.0003 4.66663" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
            </svg>

        </div>
            Not supported in ClickHouse Cloud
        </div>;
};

export const ExperimentalBadge = () => {
  return <div className="experimentalBadge">
            <div className="experimentalIcon">
            <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
                <path strokeWidth="1.25" d="M5.5 2H10.5" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
                <path strokeWidth="1.25" d="M9.50015 2V6.19625L13.4283 12.7425C13.4738 12.8183 13.4985 12.9049 13.4996 12.9934C13.5008 13.0818 13.4785 13.169 13.435 13.246C13.3914 13.323 13.3283 13.3871 13.2519 13.4317C13.1755 13.4764 13.0886 13.4999 13.0002 13.5H3.00015C2.91164 13.5 2.8247 13.4766 2.74822 13.432C2.67174 13.3874 2.60847 13.3233 2.56487 13.2463C2.52126 13.1693 2.49889 13.082 2.50004 12.9935C2.50119 12.905 2.52582 12.8184 2.5714 12.7425L6.50015 6.19625V2" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
                <path strokeWidth="1.25" d="M4.47656 9.56754C5.30344 9.41254 6.47656 9.47942 7.99969 10.25C10.0153 11.2707 11.4216 11.0569 12.2184 10.7282" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
            </svg>
        </div>
            Experimental feature. <u><a href="/docs/beta-and-experimental-features#experimental-features">Learn more.</a></u>
        </div>;
};

时间窗口函数返回对应窗口的下界 (包含) 和上界 (不包含) 。
下面列出了用于 [WindowView](/zh/reference/statements/create/view#window-view) 的相关函数：

{/*AUTOGENERATED_START*/}

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

引入版本：v21.12.0

跳跃时间窗口具有固定的窗口时长 (`window_interval`) ，并按指定的跳跃间隔 (`hop_interval`) 滑动。如果 `hop_interval` 小于 `window_interval`，则跳跃窗口会相互重叠。因此，记录可能会被分配到多个窗口。

由于一条记录可能会被分配到多个 hop 窗口，因此在不使用 WINDOW VIEW 时，hop 函数仅返回第一个窗口的边界。

**语法**

```sql theme={null}
hop(time_attr, hop_interval, window_interval[, timezone])
```

**参数**

* `time_attr` — 日期和时间。[`DateTime`](/zh/reference/data-types/datetime)
* `hop_interval` — 正的 Hop 间隔。[`Interval`](/zh/reference/data-types/int-uint)
* `window_interval` — 正的窗口间隔。[`Interval`](/zh/reference/data-types/int-uint)
* `timezone` — 可选。时区名称。[`String`](/zh/reference/data-types/string)

**返回值**

返回对应跳跃窗口的下界 (含) 和上界 (不含) 。[`Tuple(DateTime, DateTime)`](/zh/reference/data-types/tuple)

**示例**

**跳跃窗口**

```sql title=Query theme={null}
SELECT hop(now(), INTERVAL '1' DAY, INTERVAL '2' DAY)
```

```response title=Response theme={null}
('2024-07-03 00:00:00','2024-07-05 00:00:00')
```

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

引入版本：v22.1.0

返回对应跳跃窗口的排他上界。

由于一条记录可能会被分配到多个 hop window，因此在未使用 `WINDOW VIEW` 的情况下使用 hop 函数时，该函数仅返回第一个窗口的边界。

**语法**

```sql theme={null}
hopEnd(time_attr, hop_interval, window_interval[, timezone])
```

**参数**

* `time_attr` — 日期和时间。[`DateTime`](/zh/reference/data-types/datetime)
* `hop_interval` — 正的 Hop 间隔。[`Interval`](/zh/reference/data-types/int-uint)
* `window_interval` — 正的 Window 间隔。[`Interval`](/zh/reference/data-types/int-uint)
* `timezone` — 可选。时区名称。[`String`](/zh/reference/data-types/string)

**返回值**

返回对应跳跃窗口的独占上界。[`DateTime`](/zh/reference/data-types/datetime)

**示例**

**跳跃窗口 结束时间**

```sql title=Query theme={null}
SELECT hopEnd(now(), INTERVAL '1' DAY, INTERVAL '2' DAY)
```

```response title=Response theme={null}
2024-07-05 00:00:00
```

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

引入版本：v22.1.0

返回对应 hopping window 的下界 (包含该下界) 。

由于一条记录可能会被分配到多个 hop window，因此在未结合 `WINDOW VIEW` 使用 hop 函数时，该函数只返回第一个窗口的边界。

**语法**

```sql theme={null}
hopStart(time_attr, hop_interval, window_interval[, timezone])
```

**参数**

* `time_attr` — 日期和时间。[`DateTime`](/zh/reference/data-types/datetime)
* `hop_interval` — 正的 Hop 间隔。[`Interval`](/zh/reference/data-types/int-uint)
* `window_interval` — 正的窗口时间间隔。[`Interval`](/zh/reference/data-types/int-uint)
* `timezone` — 可选。时区名称。[`String`](/zh/reference/data-types/string)

**返回值**

返回对应跳跃窗口的包含下界。[`DateTime`](/zh/reference/data-types/datetime)

**示例**

**跳跃窗口起始时间**

```sql title=Query theme={null}
SELECT hopStart(now(), INTERVAL '1' DAY, INTERVAL '2' DAY)
```

```response title=Response theme={null}
2024-07-03 00:00:00
```

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

引入版本：v21.12.0

Tumbling 时间窗口会将记录分配到持续时间固定 (`interval`) 、连续且互不重叠的窗口中。

**语法**

```sql theme={null}
tumble(time_attr, interval[, timezone])
```

**参数**

* `time_attr` — 日期和时间。[`DateTime`](/zh/reference/data-types/datetime)
* `interval` — 窗口时间间隔，类型为 Interval。[`Interval`](/zh/reference/data-types/int-uint)
* `timezone` — 可选。时区名称。[`String`](/zh/reference/data-types/string)

**返回值**

返回对应滚动窗口的下界 (包含) 和上界 (不包含) 。[`Tuple(DateTime, DateTime)`](/zh/reference/data-types/tuple)

**示例**

**滚动窗口**

```sql title=Query theme={null}
SELECT tumble(now(), toIntervalDay('1'))
```

```response title=Response theme={null}
('2024-07-04 00:00:00','2024-07-05 00:00:00')
```

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

于以下版本引入：v22.1.0

返回相应滚动窗口不包含在内的上界。

**语法**

```sql theme={null}
tumbleEnd(time_attr, interval[, timezone])
```

**参数**

* `time_attr` — 日期和时间。[`DateTime`](/zh/reference/data-types/datetime)
* `interval` — 窗口的时间间隔。[`Interval`](/zh/reference/data-types/int-uint)
* `timezone` — 可选。时区名称。[`String`](/zh/reference/data-types/string)

**返回值**

返回对应滚动窗口的不包含上边界。[`DateTime`](/zh/reference/data-types/datetime)

**示例**

**滚动窗口结束**

```sql title=Query theme={null}
SELECT tumbleEnd(now(), toIntervalDay('1'))
```

```response title=Response theme={null}
2024-07-05 00:00:00
```

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

引入版本：v22.1.0

返回对应滚动窗口的下界 (包含该下界) 。

**语法**

```sql theme={null}
tumbleStart(time_attr, interval[, timezone])
```

**参数**

* `time_attr` — 日期和时间。[`DateTime`](/zh/reference/data-types/datetime)
* `interval` — `Interval` 类型的窗口时间间隔。[`Interval`](/zh/reference/data-types/int-uint)
* `timezone` — 可选。时区名称。[`String`](/zh/reference/data-types/string)

**返回值**

返回对应滚动窗口的下界 (包含该边界) 。[`DateTime`](/zh/reference/data-types/datetime)

**示例**

**滚动窗口起始**

```sql title=Query theme={null}
SELECT tumbleStart(now(), toIntervalDay('1'))
```

```response title=Response theme={null}
2024-07-04 00:00:00
```

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

Introduced in：v22.1.0

返回对应滚动窗口或跳跃窗口的窗口标识符。
此函数只能与 `WINDOW VIEW` 配合使用。

**语法**

```sql theme={null}
windowID(time_attr, interval[, timezone])
```

**参数**

* `time_attr` — 日期和时间。[`DateTime`](/zh/reference/data-types/datetime)
* `interval` — 以 Interval 表示的窗口时间间隔。[`Interval`](/zh/reference/data-types/int-uint)
* `timezone` — 可选。时区名称。[`String`](/zh/reference/data-types/string)

**返回值**

返回对应窗口的标识符。[`UInt32`](/zh/reference/data-types/int-uint)

**示例**

**窗口 ID**

```sql title=Query theme={null}
SELECT windowID(now(), toIntervalDay('1'))
```

```response title=Response theme={null}
```

<div id="related-content">
  ## 相关内容
</div>

* [时间序列使用场景指南](/zh/guides/use-cases/real-time-analytics/time-series)
