TDengine 窗口完整语法 — INTERVAL/SESSION/STATE/EVENT/COUNT 详解

发布时间:2026/9/13 1:38:14

TDengine 窗口完整语法 — INTERVAL/SESSION/STATE/EVENT/COUNT 详解 分类10.SQL 参考 |篇章05 窗口完整语法适用版本TDengine v3.xv3.3.x / v3.4.x | 最后更新2026-07-18窗口子句是 TDengine 最具特色的语法。本文按窗口类型逐一详解语法、参数、约束、典型使用模式。窗口语法速查类型语法INTERVALINTERVAL(duration [, offset]) [SLIDING(duration)]SESSIONSESSION(ts_column, gap)STATESTATE_WINDOW(state_column)EVENTEVENT_WINDOW START WITH expr END WITH exprCOUNTCOUNT_WINDOW(count [, sliding_count])FILLFILL(NULL详细解析1. INTERVAL 完整语法INTERVAL(duration[,offset])[SLIDING(duration)][FILL(...)]-- duration: 窗口时长支持 b/u/a/s/m/h/d/w/n/y-- offset: 起始偏移用于非自然对齐-- SLIDING: 滑动步长必须 ≤ INTERVAL-- 示例INTERVAL(1m)-- 每分钟INTERVAL(1h)-- 每小时00:00 对齐INTERVAL(1d)-- 每天00:00 当地时间INTERVAL(1d,8h)-- 每天但从 08:00 开始INTERVAL(1h)SLIDING(15m)-- 1 小时窗口每 15 分钟一个INTERVAL(5m)SLIDING(1m)-- 5 分钟窗口每分钟产出-- 时间单位-- b: 纳秒 (ns)-- u: 微秒 (us)-- a: 毫秒 (ms)-- s: 秒-- m: 分钟-- h: 小时-- d: 天-- w: 周-- n: 月-- y: 年2. SESSION 窗口SESSION(ts_column,gap)-- ts_column: 时间列通常 ts-- gap: 会话切分阈值-- 示例SESSION(ts,30m)-- 30 分钟无数据切分SESSION(ts,1h)-- 1 小时切分-- 用法SELECT_wstart,_wend,COUNT(*),MAX(value)FROMeventsSESSION(ts,30m);-- 行为-- 相邻两行 ts 差 gap → 切分新窗口-- 数据稀疏时窗口少密集时窗口多3. STATE 窗口STATE_WINDOW(state_column)-- state_column: 状态列整数或字符串-- 示例SELECT_wstart,_wend,status,COUNT(*)FROMmachine_log STATE_WINDOW(status);-- 行为-- state_column 值变化 → 切分窗口-- 同一值连续行合并为一个窗口-- 约束-- state_column 不能是 TIMESTAMP/FLOAT-- 必须是 INT 或 VARCHAR/NCHAR4. EVENT 窗口EVENT_WINDOWSTARTWITHexpressionENDWITHexpression-- expression: 任意布尔表达式基于行数据-- 示例SELECT_wstart,_wend,MAX(temperature)FROMsensor EVENT_WINDOWSTARTWITHtemperature80ENDWITHtemperature60;-- 行为-- 满足 START 条件 → 窗口开始-- 满足 END 条件 → 窗口结束-- 期间所有行属于该窗口-- 注意-- 同一行可能同时满足 START 和 END-- 不在窗口期内的数据被忽略5. COUNT 窗口COUNT_WINDOW(count[,sliding_count])-- count: 窗口大小行数-- sliding_count: 滑动行数可选-- 示例COUNT_WINDOW(100)-- 每 100 行一个窗口COUNT_WINDOW(100,50)-- 滑动 50 行-- 行为-- 累积 count 行后输出窗口-- 不依赖时间按行数-- 适合等量采样6. FILL 选项-- 仅 INTERVAL/SESSION 等时间相关窗口支持INTERVAL(1h)FILL(fill_mode)-- fill_mode:FILL(NULL)-- 空窗口为 NULLFILL(VALUE,0)-- 空窗口为指定值FILL(VALUE,0,1)-- 多列分别指定FILL(PREV)-- 复用前值FILL(NEXT)-- 用后值FILL(LINEAR)-- 线性插值FILL(NONE)-- 跳过空窗口默认-- 示例SELECT_wstart,AVG(current)FROMmetersWHEREtsnow-1hINTERVAL(1m)FILL(LINEAR);-- LINEAR 需要前后非空窗口-- 头部/尾部空窗口可能退化为 PREV/NEXT 行为7. PARTITION BY 窗口-- 最常见组合每子表各自窗口聚合SELECTtbname,_wstart,AVG(current)FROMmetersPARTITIONBYtbnameINTERVAL(1h);-- 多列分区SELECTlocation,groupid,_wstart,AVG(current)FROMmetersPARTITIONBYlocation,groupidINTERVAL(1h);-- 行为-- 每个 partition 独立窗口聚合-- 输出每个 (partition, _wstart) 一行8. 窗口元数据列SELECT_wstart,-- 窗口开始时间_wend,-- 窗口结束时间_wduration,-- 窗口时长毫秒_qstart,-- 查询时间范围开始_qend,-- 查询时间范围结束COUNT(*)FROMmetersWHEREtsBETWEEN2026-06-01AND2026-06-02INTERVAL(1h);-- 输出示例-- _wstart _wend _wduration _qstart _qend count-- 2026-06-01 00:00:00 2026-06-01 01:00:00 3600000 2026-06-01 00:00:00 2026-06-02 00:00:00 100-- ...代码示例综合应用-- 设备小时级监控含填充SELECTtbname,_wstartAShour,AVG(current)ASavg_c,MAX(current)ASmax_c,COUNT(*)ASsamplesFROMmetersWHEREtsBETWEEN2026-06-01AND2026-06-08ANDlocationIN(Beijing,Shanghai)PARTITIONBYtbnameINTERVAL(1h)FILL(LINEAR);-- 用户会话分析SELECTuser_id,_wstartASsession_start,_wendASsession_end,_wduration/1000ASduration_sec,COUNT(*)ASactionsFROMuser_actionPARTITIONBYuser_idSESSION(ts,30m);-- 设备状态切换SELECTtbname,_wstartASstate_start,_wendASstate_end,status,_wdurationASdurationFROMmachine_logPARTITIONBYtbname STATE_WINDOW(status);-- 异常温度事件SELECTtbname,_wstart,_wend,MAX(temperature)ASpeak,COUNT(*)ASsamplesFROMsensorWHEREtsnow-7dPARTITIONBYtbname EVENT_WINDOWSTARTWITHtemperature80ENDWITHtemperature60;-- 滑动统计SELECT_wstart,AVG(current)ASrolling_avg,MAX(current)ASrolling_maxFROMmetersWHEREtsnow-1hINTERVAL(15m)SLIDING(1m)FILL(NULL);-- 等量采样SELECT_wstart,_wend,AVG(value),COUNT(*)FROMdata_streamPARTITIONBYtbname COUNT_WINDOW(1000);性能考量各窗口性能特点窗口状态量输出量复杂度INTERVAL中等高O(N)INTERVALSLIDING高极高O(N×slide_factor)SESSION低低O(N)STATE极低中O(N)EVENT极低低O(N)COUNT极低中O(N)选择建议业务推荐窗口时间报表INTERVAL趋势监控INTERVAL SLIDING用户会话SESSION设备状态时长STATE异常事件EVENT等量采样COUNTFAQQ1: SLIDING 必须 ≤ INTERVAL是。否则数据会跳过未被覆盖。Q2: 窗口必须配合 PARTITION BY 吗不必。无 PARTITION 时所有数据合并按窗口聚合。Q3: FILL 对头部/尾部空窗口效果LINEAR 需要前后非空窗口边界情况退化为 NULL 或 PREV/NEXT 行为。Q4: 嵌套窗口支持吗不直接支持。需用子查询先小窗口聚合再大窗口聚合。Q5: 一个查询能用多个窗口吗不能。一个查询只能一种窗口类型。需要时用子查询分步。参考系统构架篇01-《TDengine 整体架构全景》02-《集群拓扑深度解析》03-《MNode 内部机制深度解析》04-《RPC 通信层深度解析》05-《VNode 生命周期》06-《RAFT 共识协议》07-《端到端的消息流》数据模型01-《数据库创建与参数详解》02-《超级表/子表/普通表》03-《支持数据类型深度解析》04-《TDengine Tag 设计哲学与 Schema 变更机制》05-《TDengine 虚拟表实现原理》存储引擎01-《TDengine 存储引擎概览》02-《TDengine MemTable 深度解析》03-《TDengine WAL 预写日志机制》04-《TDengine 数据文件格式》05-《TDengine Commit 与 Flush 机制 》06-《TDengine Compaction 合并策略 》07-《TDengine 数据保留与 TTL》08-《TDengine 压缩编码机制》09-《TDengine Cache 与 Last 查询加速》10-《TDengine 逻辑计划生成》查询引擎01-《TDengine 查询引擎概览》02-《TDengine SQL 解析与词法分析》03-《TDengine 语义分析与 AST 重写》04-《TDengine 逻辑计划生成》05-《TDengine 物理计划生成》06-《TDengine 扫描算子》07-《TDengine 聚合算子》08-《TDengine 连接算子》09-《TDengine 排序、填充与投影》10-《TDengine 分布式查询执行》11-《TDengine EXPLAIN 与查询优化》数据写入01-《TDengine SQL INSERT》02-《TDengine 无模式写入》03-《TDengine STMT 写入》04-《TDengine 写入内部流程》05-《TDengine 数据更新删除》数据订阅01-《TDengine 数据订阅》02-《TDengine 订阅 vs Kafka》03-《TDengine TMQ 消费流程》04-《TDengine 内部机制》05-《TDengine TMQ 最佳实践》预聚合01-《TDengine RSMA》02-《TDengine TSMA — 时间维度的物化聚合视图》03-《TDengine SMA 内部实现》索引01-《TDengine Tag 索引》02-《TDengine SMA 索引》SQL 语句01-《TDengine DDL》02-《TDengine DML SELECT》03-《TDengine DML 函数完整参考》关于 TDengineTDengine 专为物联网IoT平台、工业大数据平台设计。其中TDengine TSDB 是一款高性能、分布式的时序数据库Time Series Database同时它还带有内建的缓存、流式计算、数据订阅等系统功能TDengine IDMP 是一款AI原生工业数据管理平台它通过树状层次结构建立数据目录对数据进行标准化、情景化并通过 AI 提供实时分析、可视化、事件管理与报警等功能。
延伸阅读

更多相关文章

2026/9/10 23:07:14

静态 ISP 代理选型评估框架:五维评分模型与避坑清单

选代理 IP 的时候,大部分人的决策路径是这样的:搜几篇对比文 → 看价格 → 选最便宜的 → 用了两天发现问题 → 换一家 → 再出问题。根本原因在于,没有一套可量化的评估标准。价格只是表象,真正决定代理 IP 好不好用的&#xff0…

2026/9/13 1:37:10

Spring Boot影院售票系统:并发控制与安全加固实战解析

简介:基于Spring Boot框架的电影院售票管理系统源码包,面向Java Web初学者、毕业设计及课程设计人员,完整覆盖后台管理与前端用户购票核心链路。压缩包共1890个文件,大小约70.75MB,内容包含Java源码、Class编译文件、F…

2026/9/13 1:37:10

Java LocalDateTime 天/周/月边界时间计算详解

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/13 1:37:10

核心代码模式与ACM模式:刷题机试的输入输出实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/13 1:37:10

MinIO配置管理全指南:从基础到云原生实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/13 1:32:10

Django医院挂号系统实战:从数据建模到并发防超卖的完整方案

简介:这是一份基于Python Django框架开发的医院挂号诊疗系统毕业设计源码案例,适合计算机相关专业学生用于毕业设计、课程设计或项目初期演示,也适合希望学习Django Web开发的小白进阶。项目已获导师认可并通过答辩评审,代码经过测…

2026/9/13 0:01:16

拯救者Y7000黑屏故障排查与维修实战指南

1. 项目概述:一台黑屏的拯救者Y7000,到底卡在哪一步? 联想拯救者Y7000系列笔记本,从2018年第一代搭载i5-8300H开始,到后来的i7-9750H、i7-10750H、i5-11400H,再到2023年款的R7-7840HS,它始终是学…

2026/9/13 0:01:16

拯救者Y7000黑屏故障排查与维修实战指南

1. 项目概述:一台黑屏的拯救者Y7000,到底卡在哪一步? 联想拯救者Y7000系列笔记本,从2018年第一代搭载i5-8300H开始,到后来的i7-9750H、i7-10750H、i5-11400H,再到2023年款的R7-7840HS,它始终是学…

2026/9/12 6:29:36

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/12 14:32:17

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/12 6:37:43

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码