我希望根据一些标准生成一个表,其中包含一个日期,然后是集合中的下一个日期。
原始数据:
id date
1 2000-01-01
1 2000-01-02
1 2000-01-04
1 2000-01-10
1 2000-01-14
1 2000-01-15
1 2000-01-16
1 2000-01-18
2 2000-02-01
2 2000-02-02
2 2000-02-04
2 2000-02-10
2 2000-02-14
2 2000-02-15
2 2000-02-16
2 2000-02-18
会导致:
id date date
1 2000-01-01 2000-01-02
1 2000-01-02 2000-01-04
1 2000-01-04 2000-01-10
1 2000-01-10 2000-01-14
1 2000-01-14 2000-01-15
1 2000-01-15 2000-01-16
1 2000-01-16 2000-01-18
1 2000-01-18 NULL
2 2000-02-01 2000-02-02
2 2000-02-02 2000-02-04
2 2000-02-04 2000-02-10
2 2000-02-10 2000-02-14
2 2000-02-14 2000-02-15
2 2000-02-15 2000-02-16
2 2000-02-16 2000-02-18
2 2000-02-18 NULL
我知道我必须使用自联接,但我不知道如何返回顺序的下一个最大值,给定特定的id。谢谢。
答案 0 :(得分:1)
在大多数数据库中,您只需使用lead()
功能即可。在MySQL中,最简单的方法可能是相关的子查询:
select t.*,
(select t2.date
from rawdata t2
where t2.id = t.id and t2.date > t.date
order by t2.date
limit 1
) as next_date
from rawdata t;
答案 1 :(得分:0)
如果是mysql或postgresql DB,你可以使用[date + interval 1 day]
例如:
select t.id, t.date, t.date + interval 1 days as date 2 from rawdata t;
对于oracle,你可以这样做:
select t.id , t.date, TO_DATE(t.date, 'YYYY-MM-DD') + 1 from rawdata t;