【问题标题】:Calculate Datediff between rows in one column (with more than 2 records)计算一列中的行之间的 Datediff(超过 2 条记录)
【发布时间】:2014-01-31 03:48:24
【问题描述】:

我有一个表格,其中有一列日期,我想找出它们之间的区别。我已经能够在您的网站上找到一个答案,让我知道两个日期之间的差异,但找不到任何可以让我知道每个客户的几条记录之间差异的任何东西。

我的数据如下:

Customer     Pstng_Date
Henry        05\01\2014
Henry        10\01\2014
Henry        15\01/2014
Williams     07\01/2014
Williams     15\01\2014

我一直在使用下面的代码来计算威廉姆斯的例子,但不能让它工作,所以它计算了所有亨利的例子。我想看到的是:

Customer     Pstng_Date     Days_Between
Henry        05\01\2014     0
Henry        10\01\2014     5
Henry        15\01/2014     5
Williams     07\01/2014     0
Williams     15\01\2014     8

我一直在使用下面的代码来计算两条记录之间的差异。

SELECT AllDays.ID, AllDays.Customer, AllDays.Pstng_Date, AllDays.NextDate, DateDiff("d",[Pstng_Date],[NextDate]) AS Days
FROM (SELECT  ID, Customer, Pstng_Date,
                    (   SELECT  Min(Pstng_Date)
                        FROM    SAPData T2
                        WHERE  T2.Pstng_Date > T1.Pstng_Date
                    ) AS NextDate
            FROM    SAPData T1
        )  AS AllDays;

【问题讨论】:

    标签: sql database ms-access vba


    【解决方案1】:

    更改相关子查询,使其返回 T1.Customer 的早期 Pstng_Date 值中的最大值

    在 Access 2007 中使用示例数据进行测试时,此查询返回了您想要的结果。

    SELECT
        AllDays.Customer,
        AllDays.Pstng_Date,
        Nz(DateDiff("d",[PreviousDate],[Pstng_Date]), 0) AS Days_Between
    FROM
        (
            SELECT
                Customer,
                Pstng_Date,
                (
                    SELECT Max(Pstng_Date)
                    FROM SAPData AS T2
                    WHERE
                            T2.Customer = T1.Customer
                        AND T2.Pstng_Date < T1.Pstng_Date
                ) AS PreviousDate
            FROM SAPData AS T1
        ) AS AllDays;
    

    如果您要从 Access 会话外部运行查询,Nz() 函数将不可用。在这种情况下,您可以改用 IIf() 表达式。

    IIf([PreviousDate] Is Null, 0, DateDiff("d",[PreviousDate],[Pstng_Date]))
    

    【讨论】:

    • 您是否知道如何执行相同的查询,但要查找每个客户的 Max Pstng_Date 并仅返回这些记录的日期差异。所以我想看到的是:
    • 客户 ID_Date Pstng_Date Days_BetweenMAX Henry 16/01/2014 05\01\2014 0 Henry 16/01/2014 10\01\2014 0 Henry 16/01/2014 15\01/2014 1 Williams 16 /01/2014 07\01/2014 0 威廉姆斯 16/01/2014 15\01\2014 0
    • 我只想查看具有多个 Pstng_Date 的客户的数字结果。非常感谢:) @HansUp
    【解决方案2】:

    当我这样做时,我收到如下错误: 找不到列“Timelapse”或用户定义的函数或聚合“Timelapse.start_date_time”,或者名称不明确。

    我用“Timelapse”替换了“AllDays”

    SELECT
    Timelapse.[request_id],
    --Timelapse.[task_code],
    Timelapse.[start_date_time]-->getting error at this column
    (DateDiff(day,[PreviousDate],[start_date_time]), 0) AS Days_Between
    FROM
        (
            SELECT
                [request_id],[task_code],
                [start_date_time],
                (
                    SELECT Max([start_date_time])
                    FROM [Monitor247].[dbo].[request_task] AS T2
                    WHERE
                            T2.[request_id] = T1.[request_id]
                        AND T2.[start_date_time] < T1.[start_date_time]
                ) AS PreviousDate
            FROM [Monitor247].[dbo].[request_task] AS T1
        ) AS Timelapse;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-29
      • 1970-01-01
      • 2023-02-22
      • 1970-01-01
      • 2022-12-09
      • 1970-01-01
      相关资源
      最近更新 更多