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
更有效率,尤其是在大型資料集上。
這兩種方法都能計算連續行的日期差,選擇哪一種方法取決於你的資料庫系統和效能要求。 第二種方法(使用LEAD
)通常更簡潔有效率。
以上是如何計算 SQL 中連續行之間的日期差異?的詳細內容。更多資訊請關注PHP中文網其他相關文章!