首頁 >資料庫 >mysql教程 >如何在 SQL 中計算特定帳號的連續行之間的日期差異?

如何在 SQL 中計算特定帳號的連續行之間的日期差異?

Susan Sarandon
Susan Sarandon原創
2025-01-08 08:26:42514瀏覽

How to Calculate Date Differences Between Consecutive Rows for a Specific Account Number in SQL?

高效率計算特定帳戶的 SQL 中連續行之間的日期差異

本文示範了兩個 SQL 查詢來計算給定帳號的連續行之間的日期差異。 所提出的方法提供了不同程度的效率。

方法一:使用LEFT JOINMIN()

此方法使用 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn