0

次のようなテーブルがあります。

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

したがって、現在の開始日の後の次の最も早い開始日に基づいて終了日が必要です。何らかの結合が関係していると思いますが、わかりません...

4

2 に答える 2

1

これを試してください(繰り返される行がないことを前提としています):

select a.*, b.startyearmonthday as endyearmonthday
from table_name a
left join table_name b
on b.startyearmonthday > a.startyearmonthday and not exists(select startyearmonthday from table_name c where a.startyearmonthday < c.startyearmonthday and c.startyearmonthday < b.startyearmonthday)
于 2013-09-01T20:46:28.213 に答える
1

相関サブクエリでこれを行う傾向があります。

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

以前の質問と同様に、これは のインデックスでかなり速く実行されt(startyearmonthday)ます。

于 2013-09-01T20:53:57.590 に答える