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
関数を使用して日付の差を計算し、結果を ID
、AccountNumber
、Date
でグループ化して重複行を削除します。 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 サイトの他の関連記事を参照してください。