问题描述:
假设我现在有一张表*tbA* 表结构说明如下:
id uuid()
item 事项
time 时间(yyyyMMdd)
我先在要做的就是查出每条记录与上一次相同事项的时间差距(天数)
如记录:
1 item1 2019-09-10
2 item3 2019-09-09
3 item1 2019-09-09
4 item1 2019-09-01
查询出的对应结果(id 与 时间差)应该是
1 1
2 -
3 8
4 -
sql应该如何写呢?
select t3.id,t3.item,if(subDay is null,"-",subDay) subday from (select t1.id,t1.item,
DATEDIFF(t1.dateTime,
(select t2.dateTime from itemtest t2
where t1.dateTime>t2.dateTime and
t1.item=t2.item order by dateTime desc limit 1 )
) subDay
from itemtest t1) t3;
可以把t3这一层给剥去,主要是把null给转换为'-'。表名我起的是itemtest。你改下你要的表名和字段。逻辑是:t1是遍历整张表的数据。利用这个进行子查询,因为是前一次确定满足条件的最多是一条数据,所以用了limit.