特定のアカウントの SQL の連続する行間の日付の違いを効率的に計算する
この記事では、指定された口座番号の連続する行間の日付の差を計算する 2 つの SQL クエリを示します。 提示された方法は、さまざまな程度の効率を提供します。
方法 1: と LEFT JOIN
MIN()
を使用する
を使用して、各行を同じアカウントの後続の行と比較します。 LEFT JOIN
関数は次の日付を見つけます。MIN()
<code class="language-sql">SELECT T1.ID, T1.AccountNumber, T1.Date, MIN(T2.Date) AS Date2, DATEDIFF("D", 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>
) をそれ自体に結合し、各行 (YourTable
) を同じ口座番号 (T1
) の後続のすべての行と比較します。 T2
はその後の最も早い日付を検索し、MIN(T2.Date)
は日数の差を計算します。 グループ化により、元の各行の結果が保証されます。DATEDIFF
方法 2: サブクエリを使用して効率を向上させる
大規模なデータセットの場合、多くの場合、サブクエリのアプローチがより効率的であることがわかります。このメソッドは、メインクエリ内に日付計算を直接組み込みます。
<code class="language-sql">SELECT ID, AccountNumber, Date, NextDate, DATEDIFF("D", Date, NextDate) AS DaysDiff 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>
を見つけるためにサブクエリがネストされています。これにより、効率が低下する可能性がある NextDate
操作が回避されます。次に、外側のクエリは、JOIN
.DaysDiff
を使用して DATEDIFF
を計算します。
方法 2 (サブクエリを使用) が一般的に推奨されます。 データ量とデータベース システムに最適な方法を選択してください。
以上がSQLで特定の口座番号の連続する行間の日付の違いを計算する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。