mysql将数据根据创建时间分组并且按分组排序

需求是每天的数据都进行独立排序,例如20日的10条数据序号应该是1-10,21日的20条数据序号应该是1-20.

1、首先这是查询sql:

select a.id,a.created_time from app_order a;

在这里插入图片描述

2、加序号:

select @r:=@r+1 as groupSort,a.id,a.created_time from app_order a,(select @r:=0) b;

可以看到不同一天的数据并未分组排序
3、分组排序:

SELECT @r:= 
	CASE WHEN @groupTime=DATE_FORMAT(a.created_time,'%Y-%m-%d') THEN @r+1 
	ELSE 1 
	END AS sort,
	@groupTime:=DATE_FORMAT(a.created_time,'%Y-%m-%d') as groupTime,a.id,a.created_time 
FROM app_order  a , (SELECT @r:=0,@groupTime:='') b;

可以看到按创建时间进行分组排序
总结:分组第一时间想到的是group by,但如果不适用函数例如group_concat,则无法显示所有数据,使用group_concat,会导致同分组数据合并显示。第三步操作里,实际上利用了赋值差,用上一行的groupTime和当前行的groupTime做对比,如果相同就在原来的基础上+1,如果不同,就重置为1.所以需要注意的是,数据排列需要根据你要分组的列先进行排序,我这里因为存放的created_time就是按时间升序存放的,所以没有预先排序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值