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

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

Mary-Kate Olsen
リリース: 2025-01-08 08:32:42
オリジナル
229 人が閲覧しました

How to Calculate Date Differences Between Consecutive Rows in SQL?

SQL 連続行日付差計算

大規模なデータセットを扱う場合、連続するレコード間の時間間隔を決定することはデータ分析にとって重要です。 この例では、同じ口座番号を持つ連続する行間の日付の差を計算する SQL クエリが必要です。

次のようなクエリが考えられます:

<code class="language-sql">SELECT  T1.ID,
        T1.AccountNumber,
        T1.Date,
        MIN(T2.Date) AS NextDate,
        DATEDIFF(day, T1.Date, MIN(T2.Date)) AS DaysDiff
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 を使用して、テーブル T1 (元のテーブル) の各行を、同じアカウント番号を持つテーブル T2 の後続のすべての行と比較します。次に、DATEDIFF 関数を使用して日付の差を計算し、結果を IDAccountNumberDate でグループ化して重複行を削除します。 DATEDIFF(day, ...) 差分を計算する日数を指定します。

別の方法は次のとおりです:

<code class="language-sql">SELECT  ID,
        AccountNumber,
        Date,
        LEAD(Date, 1, NULL) OVER (PARTITION BY AccountNumber ORDER BY Date) AS NextDate,
        DATEDIFF(day, Date, LEAD(Date, 1, NULL) OVER (PARTITION BY AccountNumber ORDER BY Date)) AS DaysDiff
FROM    YourTable;</code>
ログイン後にコピー

このクエリはウィンドウ関数 LEAD を使用して、各口座番号の次の行の日付を取得します。 LEAD(Date, 1, NULL) OVER (PARTITION BY AccountNumber ORDER BY Date) 現在の行の次の行の日付を取得します。次の行がない場合は NULL を取得します。 次に、日付の差を計算し、結果を必要な形式で表示します。 この方法は一般に、特に大規模なデータセットの場合、LEFT JOIN よりも効率的です。

どちらの方法でも連続する行の日付の差を計算できます。どちらの方法を選択するかは、データベース システムとパフォーマンス要件によって異なります。 2 番目の方法 (LEAD を使用) は通常、より簡潔で効率的です。

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート