日付のリスト(ann_date)があり、リスト内の次の日付(古いものから新しいものの順に)を見つけて、2番目の列(next_date)を作成したいと思います。SQL Server 2008を使用しているので、LEAD関数はありません。
よろしくお願いします!
日付のリスト(ann_date)があり、リスト内の次の日付(古いものから新しいものの順に)を見つけて、2番目の列(next_date)を作成したいと思います。SQL Server 2008を使用しているので、LEAD関数はありません。
よろしくお願いします!
これはあなたを助けるはずです:
;WITH CTE AS
(
SELECT ann_date, ROW_NUMBER() OVER(ORDER BY ann_date) RN
FROM YourTable
)
SELECT A.ann_date, B.ann_date next_date
FROM CTE A
LEFT JOIN CTE B
ON A.RN = B.RN - 1
これにアプローチする方法はいくつかあります。必要な次の日付のみの場合は、相関サブクエリを使用できます。
SELECT Ann_Date,
[Next_Date] = ( SELECT MIN(ann_Date)
FROM T T2
WHERE T2.Ann_Date > T.Ann_Date
)
FROM T;
または、次の行からさらにデータが必要な場合は、APPLY
SELECT T.Ann_Date
Next_Date = nxt.Ann_Date,
nxt.SomeOtherField
FROM T
OUTER APPLY
( SELECT TOP 1 Ann_Date, SomeOtherField
FROM T T2
WHERE T2.Ann_Date > T.Ann_Date
ORDER BY Ann_Date
) nxt;
分析関数と結合を使用してこれを行うこともできます。スキーマの詳細やデータがない場合と同様に、特定の最適な回答を提供することはほとんど不可能です。そのため、実行プランとIO統計を使用して、どちらが最適なソリューションであるかを判断してください。