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

MySQL查询咨询:将状态数据行转列展示的实现方法

实现MySQL行转列(状态转时间列)的查询方案

刚好碰到过类似的需求,这本质是把行数据转成列的经典场景,用MySQL的条件聚合就能轻松解决。先理清楚你的需求细节:

原表table1查询结果

idtimedateStatus
107:30:002019-06-190
111:30:002019-06-191
113:00:002019-06-192
116:30:002019-06-193
208:10:002019-06-190
212:03:002019-06-191
213:01:002019-06-192
216:15:002019-06-193

期望输出格式

idDateCheckinBreakoutBreakinCheckout
12019-06-1907:30:0011:30:0013:00:0016:30:00
22019-06-1908:10:0012:03:0013:01:0016:15:00

对应的SQL查询语句

SELECT 
    id,
    date AS `Date`,
    MAX(CASE WHEN Status = 0 THEN time END) AS `Checkin`,
    MAX(CASE WHEN Status = 1 THEN time END) AS `Breakout`,
    MAX(CASE WHEN Status = 2 THEN time END) AS `Breakin`,
    MAX(CASE WHEN Status = 3 THEN time END) AS `Checkout`
FROM table1
GROUP BY id, date
ORDER BY id;

逻辑说明

  1. 分组聚合:通过GROUP BY id, date把同一个用户(id)同一天的所有状态记录合并到一行
  2. 条件匹配取值:每个CASE语句会筛选对应状态的时间,不匹配的记录会返回NULL
  3. 提取有效数据:MAX()函数会从每组的结果中取出非NULL的时间值(因为每个id+date下每个状态只会有一条有效记录,用MIN()也能达到同样效果)

如果后续新增了其他状态,只需要按照同样的格式添加新的MAX(CASE ...)语句即可,扩展性很强。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:28:37