MySQL 如何写对时间分组查询?

表结构如下

TAG TIME
A 9:00
A 12:00
B 14:00
B 17:00
A 18:00
A 19:00

期望结果:

TAG TIME
A 9:00-12:00,18:00-19:00
B 14:00-17:00
阅读 3.6k
4 个回答

有一个不成熟答案,暂作思路吧

select tag, group_concat(time,',') from tablename

关键点在 函数group_concat,虽然没办法像你要求的那样,但至少完成了第一步

剩下的我觉得你完全可以在程序层面去解决,毕竟sql搞这个,哪怕可以实现,其代价也是不容小觑

如果你这种需求很频繁的话,还是建议换一个时序数据库吧。这种时间相关的聚合并不是mysql的强项

好怪的样子。。。
如果时间连接符都一样的话还好理解,有点好奇你要怎么判断要 - 还是 ,

数据量少可以跑一下,上百万级的就想其他办法吧:

select 
    tag,group_concat(mtime) gtime
from (
    select 
        convert(gn,signed) cgn,tag,
        concat(min(time),'-',max(time)) mtime
    from (
        select 
            @gn:=case when @tag=tag then @gn else @gn+1 end gn,
            @tag:=tag tag,time
        from table,(select @gn:=0) a
        ) aa
    group by gn
    order by cgn
    ) aaa
group by tag;
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进