需求是每天的数据都进行独立排序,例如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就是按时间升序存放的,所以没有预先排序。