You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用MySQL查询实现按传感器ID拆分列重构表数据?

实现行转列(Pivot)的MySQL查询方案

你需要的是把按传感器ID分散的行数据,转成同一时间戳下多列展示的格式,这在MySQL里可以通过条件聚合轻松实现,刚好你的表(timestamp, sensor_id)是唯一键,不会出现同一时间戳下同一个传感器有多条数据的冲突问题。

核心查询语句

SELECT
  timestamp,
  MAX(CASE WHEN sensor_id = 'id1' THEN value END) AS value_id1,
  MAX(CASE WHEN sensor_id = 'id2' THEN value END) AS value_id2,
  MAX(CASE WHEN sensor_id = 'id3' THEN value END) AS value_id3
FROM your_table_name
GROUP BY timestamp
ORDER BY timestamp;

逻辑说明

  • CASE WHEN会根据sensor_id的取值,把对应的value映射到目标列,不匹配的行则返回NULL
  • 因为(timestamp, sensor_id)是唯一键,同一时间戳下每个传感器只会有一条数据,用MAX()(或SUM()/MIN()都可以)聚合就能把同一时间戳下的多行合并成一行,自动过滤掉NULL值
  • GROUP BY timestamp保证我们按时间维度聚合所有传感器的数据
  • 最后加ORDER BY timestamp可以让结果按时间顺序排列,更直观

可选优化:处理空值

如果某个时间戳下某个传感器没有数据,对应的列会显示NULL,要是想换成默认值(比如0),可以用COALESCE()函数包裹:

SELECT
  timestamp,
  COALESCE(MAX(CASE WHEN sensor_id = 'id1' THEN value END), 0) AS value_id1,
  COALESCE(MAX(CASE WHEN sensor_id = 'id2' THEN value END), 0) AS value_id2,
  COALESCE(MAX(CASE WHEN sensor_id = 'id3' THEN value END), 0) AS value_id3
FROM your_table_name
GROUP BY timestamp
ORDER BY timestamp;

和单ID查询的关联

你原来的单个ID查询是单独筛选某一个传感器的数据,这个方案相当于把三个单独的查询结果,通过GROUP BY timestamp合并成了同一条记录的不同列,完美实现了你要的合并展示效果。

内容的提问来源于stack exchange,提问作者mpetitjean

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 08:17:53