ホームページ >データベース >mysql チュートリアル >SQLで連続する行間の日付の差を計算するにはどうすればよいですか?

SQLで連続する行間の日付の差を計算するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2025-01-08 08:36:40395ブラウズ

How to Calculate the Date Difference Between Consecutive Rows in SQL?

SQL での連続レコード間の時間ギャップの決定

このチュートリアルでは、SQL テーブル内の特定の口座番号の連続する行間の日付の差を計算する方法を説明します。

方法 1: サブクエリのアプローチ

このクエリは、サブクエリを使用して日付の差を計算します。

<code class="language-sql">SELECT  ID,
        AccountNumber,
        Date,
        NextDate,
        DATEDIFF(day, Date, NextDate) AS DateDifference
FROM    (   SELECT  ID, 
                    AccountNumber,
                    Date,
                    (   SELECT  MIN(Date) 
                        FROM    YourTable T2
                        WHERE   T2.AccountNumber = T1.AccountNumber
                        AND     T2.Date > T1.Date
                    ) AS NextDate
            FROM    YourTable T1
        ) AS T</code>

説明:

外側のクエリは、ID、AccountNumber、Date、計算された NextDate、および日付の差を選択します。 内部クエリは、現在の行の日付より大きく、同じアカウントに属する最小の日付を検索することで、各行の次の日付 (NextDate) を識別します。 DATEDIFF(day, Date, NextDate) は日数の差を計算します。

方法 2: 自己結合テクニック

より効率的な代替方法は、自己結合を利用することです:

<code class="language-sql">SELECT  T1.ID, 
        T1.AccountNumber, 
        T1.Date, 
        MIN(T2.Date) AS NextDate, 
        DATEDIFF(day, T1.Date, MIN(T2.Date)) AS DateDifference
FROM    YourTable T1
LEFT JOIN YourTable T2
    ON T1.AccountNumber = T2.AccountNumber
    AND T2.Date > T1.Date
GROUP BY T1.ID, T1.AccountNumber, T1.Date;</code>

このアプローチでは、LEFT JOIN を使用して、各行を、同じ口座番号とそれ以降の日付を持つ後続の行と比較します。 MIN(T2.Date) は次の日付を検索し、DATEDIFF(day, ...) は日数の差を計算します。 次の行のない行には、NULLNextDateDateDifference 値が含まれます。 DATEDIFF の最初の引数は差分の単位 (ここでは「日」) を指定することに注意してください。 必要に応じて調整します (例: 「月」、「年」)。

以上がSQLで連続する行間の日付の差を計算するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。