ホームページ >データベース >mysql チュートリアル >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, ...)
は日数の差を計算します。 次の行のない行には、NULL
と NextDate
の DateDifference
値が含まれます。 DATEDIFF
の最初の引数は差分の単位 (ここでは「日」) を指定することに注意してください。 必要に応じて調整します (例: 「月」、「年」)。
以上がSQLで連続する行間の日付の差を計算するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。