VertigozZ 2016年12月21日
【超实用】关于mysql分组排序的一些用法。。。。欢迎批评指教
今天逛论坛,进错了板块,跑到DB2的板块去了,突然看到一个帖子提问,大概是9月份的老帖了。就很感兴趣的想用mysql试试,本以为直接group by min,max就解决了,但是显然是低估了题主的疑惑。

链接:http://bbs.csdn.net/topics/392025981

帖子内容:
(数据字段只有四个)


于是乎,计划用mysql的变量加分组排序的变形来解决问题:

建个测试表:
create table m
(
`de` varchar(10),
`ar` varchar(10),
`detime` DATE,
`artime` date

)
engine = InnoDB auto_increment = 1 DEFAULT charset = utf8mb4

插入数据:
INSERT INTO m VALUES('北京','广州','20160901','20160902'),
('北京','广州','20160903','20160906'),
('北京','广州','20160907','20160908'),
('北京','上海','20160909','20160910'),
('北京','深圳','20160911','20160915'),
('北京','深圳','20160917','20160920'),
('北京','广州','20160922','20160924'),
('北京','广州','20160925','20160926')


第一直觉:
SELECT de,
ar,
min(detime),
max(artime)

from m

GROUP BY 1,2

结果:

与题主想要的结果不符

二次思考:
SELECT result.number,
result.de,
result.ar,
min(result.detime),
max(result.artime)
FROM
(
select b.de,b.ar,b.detime,b.artime,

if(b.de=@x and b.ar = @y,@num:=@num,@num:=@num+1) as number,
@x:=b.de,
@y:=b.ar
from (select de,ar,detime,artime from m order by detime,artime ) b ,
(select @x := null , @y := NULL, @num:=0) c
)result
GROUP BY 1,2,3


结果:


成功了,感叹mysql的变量真的很好用!!
...全文
138 点赞 收藏 4
写回复
4 条回复

还没有回复,快来抢沙发~

发动态
发帖子
MySQL
创建于2007-09-28

2.4w+

社区成员

5.5w+

社区内容

MySQL相关内容讨论专区
社区公告
暂无公告