表格有日期,然后是下一个日期

时间:2016-02-23 21:32:36

标签: mysql sql

我希望根据一些标准生成一个表,其中包含一个日期,然后是集合中的下一个日期。

原始数据:

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。谢谢。

2 个答案:

答案 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;