TDengine SQL 与标准 SQL 差异 — 时序数据库的特殊性
分类10.SQL 参考 |篇章08 SQL 差异适用版本TDengine v3.xv3.3.x / v3.4.x | 最后更新2026-07-22点击了解免费详情TDengine 兼容大部分标准 SQL 但有时序特性扩展和限制。本文系统列出与 MySQL/PostgreSQL 等关系数据库的核心差异帮助迁移和误用排查。核心差异概览维度标准 SQLTDengine主键任意类型必须 ts (TIMESTAMP)表组织单层超级表/子表/普通表JOIN任意条件必须含时间条件窗口OVER 窗口INTERVAL/SESSION/STATE/EVENT/COUNT存储行式列式Schema严格支持 Schemaless索引任意列时间Tag 自动事务ACID单语句原子详细解析1. 主键与数据模型标准 SQL CREATE TABLE t ( id INT PRIMARY KEY, name VARCHAR(100) ); TDengine CREATE TABLE t ( ts TIMESTAMP, -- 必须是第一列 val FLOAT ); -- 时间列隐式为主键 超级表概念无对应 TDengine 特有 一组同构子表的模板 Tag 作为标签维度2. JOIN 限制标准 SQL SELECT * FROM t1 JOIN t2 ON t1.id t2.id; -- 任意条件 OK TDengine SELECT * FROM t1 JOIN t2 ON t1.ts t2.ts AND t1.id t2.id; -- 必须有时间相关条件 -- 替代方案 ASOF JOIN -- 时间近邻 WINDOW JOIN -- 时间窗口3. 窗口函数标准 SQLOVER 窗口 SELECT id, val, AVG(val) OVER (PARTITION BY tag ORDER BY ts ROWS BETWEEN 5 PRECEDING AND CURRENT ROW) FROM t; TDengine窗口子句 SELECT _wstart, AVG(val) FROM t PARTITION BY tag INTERVAL(1h); -- 或 MAVG 函数 SELECT ts, MAVG(val, 5) FROM t; -- 不支持 OVER ... ROWS BETWEEN4. DELETE/UPDATE标准 SQL DELETE FROM t WHERE id 1; UPDATE t SET val 0 WHERE id 1; -- 无时间约束 TDengine DELETE FROM t WHERE ts T1 AND ts T2; -- 必须有时间范围条件 UPDATE t SET val 0 WHERE ts 2026-06-04 12:00:00; -- ts 是主键唯一定位行 -- 不支持 WHERE val 100 -- 必须含 ts5. 索引标准 SQL CREATE INDEX idx ON t (name); CREATE INDEX idx ON t (name, age); -- 组合索引 TDengine -- 数据列无显式索引 -- 块 SMA 自动统计 -- Tag 索引 CREATE INDEX idx ON super_table (tag_column); -- 不支持组合索引 -- 不支持函数索引6. 事务与一致性标准 SQL BEGIN; INSERT INTO t1 ...; INSERT INTO t2 ...; COMMIT; -- ACID 事务 TDengine -- 单语句原子单 SQL 内全成或全败 INSERT INTO t1 ..., t2 ... ; -- 跨表批量也原子 -- 不支持 BEGIN/COMMIT/ROLLBACK 跨语句事务 -- 替代业务层处理一致性7. SELECT 限制不支持/有限支持的特性 ① 复杂子查询 - 标量子查询有限 - 关联子查询不支持 ② OVER 窗口函数 - ROW_NUMBER/RANK/DENSE_RANK 不支持 - LAG/LEAD 不支持用 DIFF/MAVG 替代 ③ WITH RECURSIVE - 不支持递归 CTE ④ MERGE / UPSERT - 不支持 MERGE INTO - INSERT 天然按 ts 去重 ⑤ FULL TEXT SEARCH - 不内置全文检索8. 数据类型差异TDengine 特有 TIMESTAMP (主键) TDengine 缺少 TEXT (大文本) → 用 VARCHAR(N) BLOB (大二进制) → 用 VARBINARY(N) DATE / TIME (单独) → 都用 TIMESTAMP DECIMAL (精确小数) → 用 DOUBLE / 整数缩放 ENUM → 用 VARCHAR 应用层约束 ARRAY → 用 JSON 或拆列 注意 VARCHAR 长度按字节计N 字节 NCHAR 按字符计N 个 Unicode 字符代码示例迁移示例-- MySQL 写法CREATETABLEsensors(idINTPRIMARYKEYAUTO_INCREMENT,device_idVARCHAR(50),tsDATETIME,valueDOUBLE,INDEXidx_device(device_id));INSERTINTOsensorsVALUES(1,d001,2026-06-04 12:00,25.3);-- TDengine 改写CREATESTABLE sensors(tsTIMESTAMP,valueDOUBLE)TAGS(device_idVARCHAR(50));CREATETABLEd001USINGsensors TAGS(d001);INSERTINTOd001VALUES(2026-06-04 12:00:00,25.3);-- 或自动建表INSERTINTOd001USINGsensors TAGS(d001)VALUES(2026-06-04 12:00:00,25.3);查询改写-- MySQL ROW_NUMBERSELECT*,ROW_NUMBER()OVER(PARTITIONBYdevice_idORDERBYtsDESC)ASrnFROMsensorsWHERErn1;-- TDengine 改写用 LAST_ROWSELECTLAST_ROW(*)FROMsensorsPARTITIONBYtbname;-- MySQL LAGSELECTts,value,LAG(value)OVER(PARTITIONBYdevice_idORDERBYts)ASprevFROMsensors;-- TDengine 改写用 DIFFSELECTts,value,value-DIFF(value)ASprevFROMsensors;-- 或不直接计算 LAG用 DIFF 表示变化-- MySQL MERGEMERGEINTOtargetUSINGsourceONtarget.idsource.idWHENMATCHEDTHENUPDATESETvalsource.valWHENNOTMATCHEDTHENINSERT(id,val)VALUES(source.id,source.val);-- TDengine 改写INSERTINTOtargetSELECT*FROMsource;-- ts 主键天然去重窗口改写-- 标准 OVER 窗口SELECTid,ts,AVG(val)OVER(ORDERBYtsROWSBETWEEN5PRECEDINGANDCURRENTROW)ASrollingFROMt;-- TDengine MAVGSELECTts,MAVG(val,6)ASrollingFROMt;-- 标准 PARTITION BY ts BUCKETSELECTTIMESTAMP_BUCKET(ts,INTERVAL1 hour)ASh,AVG(val)FROMtGROUPBYh;-- TDengine INTERVALSELECT_wstart,AVG(val)FROMtINTERVAL(1h);性能考量迁移性能预期场景TDengine vs MySQL/PostgreSQL单设备写入10x~50x批量写入100x时序聚合查询10x~100x任意 JOIN受限设计上不擅长全文检索不支持复杂 OLAP部分支持设计原则关系数据库习惯TDengine 改写自增 ID 主键时间戳 Tag单表千万行拆分为超级表 子表任意 JOIN限制为时间相关OVER 窗口时序窗口函数事务业务层处理FAQQ1: 标准 SQL 哪些功能不支持主要不支持复杂 OVER 窗口、递归 CTE、跨语句事务、全文检索、复杂关联子查询。Q2: 应用迁移成本大吗时序场景迁移简单90% SQL 可用复杂 OLTP不适合应保留原数据库Q3: 能用 ORM 框架吗支持 JDBC/ODBC/Python DB-API 等标准接口主流 ORM 大多兼容。某些 ORM 的高级特性如懒加载、复杂查询构造需注意。Q4: 时区怎么处理存储 UTC客户端按时区显示。建议明确指定时区。Q5: 能与现有关系数据库共存吗可以。常见架构TDengine时序数据MySQL/Postgres业务元数据应用层组合查询参考系统构架篇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 函数完整参考》04-《TDengine JOIN 完整语法》05-《TDengine 窗口完整语法》06-《TDengine 操作符与表达式》07-《TDengine 系统表》关于 TDengineTDengine 专为物联网IoT平台、工业大数据平台设计。其中TDengine TSDB 是一款高性能、分布式的时序数据库Time Series Database同时它还带有内建的缓存、流式计算、数据订阅等系统功能TDengine IDMP 是一款AI原生工业数据管理平台它通过树状层次结构建立数据目录对数据进行标准化、情景化并通过 AI 提供实时分析、可视化、事件管理与报警等功能。

相关新闻

最新量化开发卡住,先查规则和流程是否完整

最新量化开发卡住,先查规则和流程是否完整

量化实现并不只是把交易想法翻译成代码。很多时候,代码写不下去,是因为规则本身还没有达到程序需要的清晰程度。手工交易可以依赖临场判断,而量化表达需要把判断拆成固定的条件和流程,这正是 AI 可以参与协作的地方。规则要先变得…

2026/10/11 4:45:47 阅读更多 →
HarmonyOS掌上记账APP开发实践第67篇:鸿蒙权限声明体系 — INTERNET / PUBLISH_AGENT_REMINDER 等权限的合理使用

HarmonyOS掌上记账APP开发实践第67篇:鸿蒙权限声明体系 — INTERNET / PUBLISH_AGENT_REMINDER 等权限的合理使用

鸿蒙权限声明体系 — INTERNET / PUBLISH_AGENT_REMINDER 等权限的合理使用文章简介 HarmonyOS 的应用权限体系是保障用户隐私和应用安全的核心机制。MoneyTrack 作为一款联网记账应用,需要在 module.json5 中声明多项权限,包括网络访问权限(…

2026/10/11 4:45:52 阅读更多 →
Gemini 3.5网页版免登录,国内直连免费使用

Gemini 3.5网页版免登录,国内直连免费使用

在 2026 年,大模型的快速迭代让开发者在编写代码和处理文档时有了更多选择,Gemini 3.5 凭借其出色的多模态能力和超长上下文优势受到了技术圈的广泛关注 。但对于国内开发者来说,官方网页版不仅需要繁琐的登录验证,网络门槛也较高…

2026/10/5 18:23:41 阅读更多 →

最新新闻

python | 这才是AI编程的正确打开方式,VSCode + ClaudeCode让写代码快到飞起!TaoToken 统一 Key 接入实战

python | 这才是AI编程的正确打开方式,VSCode + ClaudeCode让写代码快到飞起!TaoToken 统一 Key 接入实战

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

2026/10/11 4:45:22 阅读更多 →
AI Agent入门:从人工模拟到最小闭环的实战路径

AI Agent入门:从人工模拟到最小闭环的实战路径

1. 这不是“学AI”的入门,是“用AI解决问题”的起点很多人点开“AI Agent 入门”这个标题,心里想的是:是不是该装个LangChain、跑通一个AutoGen demo、把Llama3本地跑起来?结果三天后卡在环境配置里,五天后对着一堆抽象…

2026/10/11 4:45:22 阅读更多 →
2026第40周GitHub趋势榜观察:AI基建崛起与开源选型避坑指南

2026第40周GitHub趋势榜观察:AI基建崛起与开源选型避坑指南

今年第40周的GitHub趋势周报,比以往更值得花点时间看。原因倒不只是榜单本身,而是这个时间节点卡得微妙:长假刚结束,大量仓库的提交频率还没来得及恢复,另一批假期里憋大招的项目却开始集中放量。你要是只看一眼Star总…

2026/10/11 4:45:22 阅读更多 →
多智能体路径跟随控制训练:从环境建模到奖励设计全解析

多智能体路径跟随控制训练:从环境建模到奖励设计全解析

简介:这是一份基于MATLAB/Simulink的多智能体强化学习路径跟踪控制实例压缩包,主要面向研究强化学习、自动驾驶、智能体协同控制的开发者和中高级学习者。实例围绕多智能体沿预设路径跟踪问题展开,分别针对ACC自适应巡航控制与LKA车道保持辅助…

2026/10/11 4:45:22 阅读更多 →
全国矢量地图SHP文件实战:Python处理行政、路网、河网与水系

全国矢量地图SHP文件实战:Python处理行政、路网、河网与水系

简介:这份全国矢量地图SHP文件包面向GIS从业者、地理科研人员及城市规划学习者,提供覆盖全国范围的行政边界、路网、河网与水系空间数据,可用于地图制作、空间分析与规划决策等场景。压缩包共113个文件,约10.49MB,以sh…

2026/10/11 4:45:22 阅读更多 →
如何一键把微信聊天记录完整导出来:WeChatMsg 5分钟上手

如何一键把微信聊天记录完整导出来:WeChatMsg 5分钟上手

如何一键把微信聊天记录完整导出来:WeChatMsg 5分钟上手 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/WeC…

2026/10/11 4:44:21 阅读更多 →

日新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

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

2026/10/10 5:23:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

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

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

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

2026/10/10 10:38:42 阅读更多 →