表结构如下
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 |
表结构如下
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 |
数据量少可以跑一下,上百万级的就想其他办法吧:
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;
1 回答775 阅读
783 阅读
有一个不成熟答案,暂作思路吧
select tag, group_concat(time,',') from tablename
关键点在 函数
group_concat
,虽然没办法像你要求的那样,但至少完成了第一步剩下的我觉得你完全可以在程序层面去解决,毕竟sql搞这个,哪怕可以实现,其代价也是不容小觑