我有一个这样的表:

startyearmonthday| id
20130901         |  1
20131004         |  2
20130920         |  3
20131105         |  4
20131009         |  5


我想编写一个查询,我可以在其中返回一个表,如下所示:

startyearmonthday| id  | endyearmonthday
20130901         |  1  | 20130920
20130920         |  3  | 20131004
20131004         |  2  | 20131009
20131009         |  5  | 20131105
20131105         |  4  | null


因此,我希望结束日期基于当前开始日期之后的下一个最早的开始日期。我想象其中涉及某种加入,但我无法弄清楚...

最佳答案

我倾向于使用相关的子查询来做到这一点:

select t.*,
       (select startyearmonthday
        from t t2
        where t2.startyearmonthday > t.startyearmonthday
        order by t2.startyearmonthday
        limit 1
       ) as endyearmonthday
from t;


与您之前的问题一样,这将在t(startyearmonthday)上使用索引快速运行。

10-05 19:54