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

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

Susan Sarandon
發布: 2025-01-08 08:26:42
原創
469 人瀏覽過

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板