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

发布时间:2026/11/5 12:17:16

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/10/25 3:04:49

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

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

2026/11/5 12:14:29

Stimulsoft Reports 2019.2.2 落地指南:老系统兼容与版本陷阱规避

简介:Stimulsoft Reports 2019.2.2 是一款面向.NET开发者的专业报表控件,适用于WinForms、ASP.NET及WPF平台,帮助开发者快速构建数据可视化报表与打印输出功能,尤其适合中高级C#工程师在企业级管理系统、BI看板或财务报表模块中集…

2026/11/5 12:14:29

H110/B250主板BIOS魔改:CPU微码、ME与刷写校验全流程

简介:面向希望为 B150、B250、H110 等老主板扩展 Intel 8/9 代 CPU 兼容性的 DIY 玩家与装机爱好者,这份 BIOS 魔改工具包提供了一套较完整的固件修改辅助材料,适合具备一定硬件基础、了解刷写风险的用户在做好备份与稳定供电的前提下研究使用…

2026/11/5 12:14:29

GD32E10x官方例程入门:从点灯到外设调试全流程

简介:这份GD32E10x系列官方例程面向使用兆易创新GD32E10x系列MCU的嵌入式开发者与初学者,基于ARM Cortex-M3内核,集合了从基础外设到通信、电机控制等场景的示例代码,可用于快速理解芯片用法并搭建工程。压缩包共935个文件&#x…

2026/11/5 12:09:24

潍坊高纯氢氧化镁生产厂家怎么选:泽隆新材料靠谱商家测评排名

潍坊高纯氢氧化镁怎么选不踩坑:从产能、品控到定制能力,一篇讲透靠谱厂家的判断标准采购高纯氢氧化镁、阻燃级氢氧化镁,最怕的不是价格高,而是批次不稳、指标浮动、交期失控。尤其是做线缆料、橡胶制品、阻燃母粒的企业&#xff0…

2026/11/4 12:38:23

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/4 21:04:25

SSM电子书店源码全解析:结构、原理、部署与排错实战

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

2026/11/5 0:02:07

多智能体协作系统架构设计与实践优化

1. 多智能体协作系统的时代背景2017年Transformer架构的诞生彻底改变了人工智能的发展轨迹。当行业还沉浸在单一大模型带来的性能突破时,Anthropic的研究团队已经将目光投向了更前沿的领域——如何让多个智能体通过协作产生超越单体能力的系统智能。这就像交响乐团中…

2026/11/5 0:02:07

大模型系统性入门实战指南:从原理到部署微调的全链路路线

提到大模型的系统性入门,我先说个结论:这事真不难,难的是资料太散、路线太多,今天这个框架明天那个工具,新人很容易在“收藏夹吃灰”和“教程看到一半放弃”之间反复横跳。市面上关于大模型的内容少说有几十万篇&#…

2026/11/5 0:02:07

鸿蒙文件系统沙箱机制解析与开发实践

1. 鸿蒙文件系统沙箱机制深度解析作为一名从Android转向鸿蒙开发的工程师,我深刻体会到文件系统访问是迁移过程中最先遇到的"拦路虎"。在Android上运行良好的文件读写代码,在鸿蒙真机环境却频频出现文件写入后神秘消失或直接抛出权限拒绝错误的…

2026/11/4 12:38:23

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/4 21:04:25

SSM电子书店源码全解析:结构、原理、部署与排错实战

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

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

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

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