高效率計算特定帳戶的 SQL 中連續行之間的日期差異
本文示範了兩個 SQL 查詢來計算給定帳號的連續行之間的日期差異。 所提出的方法提供了不同程度的效率。
方法一:使用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
計算天數差異。 分組可確保每個原始行都有一個結果。
方法二:使用子查詢提高效率
對於較大的資料集,子查詢方法通常被證明更有效。此方法直接將日期計算合併到主查詢中。
<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中文網其他相關文章!