-3

日付のリスト(ann_date)があり、リスト内の次の日付(古いものから新しいものの順に)を見つけて、2番目の列(next_date)を作成したいと思います。SQL Server 2008を使用しているので、LEAD関数はありません。

よろしくお願いします!

4

2 に答える 2

2

これはあなたを助けるはずです:

;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
于 2013-01-10T17:00:12.983 に答える
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統計を使用して、どちらが最適なソリューションであるかを判断してください。

于 2013-01-10T17:04:01.387 に答える