我有一个这样的表:
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)
上使用索引快速运行。