连续行之间的日期差异

Moh*_*hal 34 sql ms-access

我有一个具有以下结构的表

ID     Account Number     Date
1      1001               10/9/2011 (dd/mm/yyyy)
2      2001               1/9/2011 (dd/mm/yyyy)
3      2001               3/9/2011 (dd/mm/yyyy)
4      1001               12/9/2011 (dd/mm/yyyy)
5      3001               18/9/2011 (dd/mm/yyyy)
6      1001               20/9/2011 (dd/mm/yyyy)
Run Code Online (Sandbox Code Playgroud)

基本上我想要做的是有一个访问查询,计算连续记录的日期差异,但相同的帐号,预期的结果将是!!

1001      10/9/2011 - 12/9/2011     2 days
1001      12/9/2011 - 20/9/2011     8 days
1001      20/9/2011                 NA
Run Code Online (Sandbox Code Playgroud)

基本上我想要做的是有一个访问查询,计算连续记录的日期差异,但对于相同的帐号,在上面的例子中将是1001.(日期不必显示在结果中)

我使用Access 2003.

Gar*_*thD 53

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;
Run Code Online (Sandbox Code Playgroud)

要么

SELECT  ID,
        AccountNumber,
        Date,
        NextDate,
        DATEDIFF("D", Date, NextDate)
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
Run Code Online (Sandbox Code Playgroud)


vik*_*ana 12

您还可以使用 LAG 分析函数来获得所需的结果:

假设下面是您的输入表:

id  account_number  account_date
1     1001          9/10/2011
2     2001          9/1/2011
3     2001          9/3/2011
4     1001          9/12/2011
5     3001          9/18/2011
6     1001          9/20/2011


select id,account_number,account_date,
datediff(day,lag(account_date,1) over (partition by account_number order by account_date asc),account_date)
as day_diffrence
from yourtable;
Run Code Online (Sandbox Code Playgroud)

这是您的输出:

id  account_number  account_date    day_diffrence
1     1001           9/10/2011    NULL
4     1001           9/12/2011    2
6     1001           9/20/2011    8
2     2001           9/1/2011     NULL
3     2001           9/3/2011     2
5     3001           9/18/2011    NULL
Run Code Online (Sandbox Code Playgroud)

  • 问题被标记为“MS Access”,据我所知,Access 不支持分析功能。问题还指出 OP 使用的是 Access 2003,它绝对不支持“LAG()”功能。因此,虽然这对于其他 DBMS 来说是一种很好的方法,但这并不是这个问题的答案。此外,OP 想要当前行和下一个日期之间的差异,因此您需要使用 `LEAD()` 而不是 `LAG()` (2认同)