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

1、首先这是查询sql:

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

mysql时间倒叙排列 mysql 日期排序_mysql

2、加序号:

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

mysql时间倒叙排列 mysql 日期排序_Time_02


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;

mysql时间倒叙排列 mysql 日期排序_mysql_03


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