【问题标题】:calculate difference between dates in same column计算同一列中日期之间的差异
【发布时间】:2019-09-25 13:30:09
【问题描述】:

我正在尝试计算同一列中日期之间的差异,但到目前为止没有成功。
这是我正在使用的数据,这是我到目前为止所做的代码。我提供了脚本供您参考。希望它有所帮助。

CREATE TABLE Test (Product varchar (250), Orderdate Datetime );
insert into TEST (product, orderdate) 
values ('A', '2019/01/01'), ('B', '2019/01/11'),  ('C', '2019/01/15'),  ('D', '2019/01/20');

脚本我正在运行并获得实际结果。

SELECT  t.Product,  t.orderdate,    
        datediff(day,t2.orderdate,t.orderdate) as diffdays  
FROM TEST t  
  join test t2 on t2.product = t.product

以下是想要的结果:

Product Orderdate   Diffdays
A       1/1/2019        0
B       1/11/2019       10
C       1/15/2019       4
D       1/20/2019       5

实际结果:

Product orderdate   diffdays
A       1/1/2019          0
B       1/11/2019         0
C       1/15/2019         0
D       1/20/2019         0

【问题讨论】:

  • 如果您接受答案,将对其他用户有所帮助。

标签: sql-server tsql datediff


【解决方案1】:

每个产品只有一行,所以如果你加入它,你将加入同一行,如你所见,导致 datediff 为零。

相反,您可以根据product lag orderdate,并将其用于日期差异:

SELECT   product,
         orderdate,
         COALESCE(DATEDIFF(DAY, overdate, LAG(overdate) OVER (ORDER BY product)),0)
FROM     test
ORDER BY 1

【讨论】:

    【解决方案2】:

    试试滞后功能:

    SELECT 
    product,
    ISNULL(
       DATEDIFF(DAY, lag(orderdate,1) OVER (ORDER BY orderdate), orderdate),0) AS DIF
    FROM TEST
    ORDER BY PRODUCT
    

    【讨论】:

      【解决方案3】:
      SELECT t.product, 
             t.orderdate, 
             IsNull(Datediff(day, Lag(t.orderdate, 1) 
                                    OVER ( 
                                      ORDER BY t.orderdate), t.orderdate), 0) 
      FROM   test t 
      

      【讨论】:

      • 这行得通!非常感谢!我将了解延迟函数,因为你们中的许多人都用它来解决这个问题。
      【解决方案4】:

      以下查询将满足您的问题。

      SELECT X.Product,X.Orderdate,ISNULL(DATEDIFF(DAY,X.PREVDATE,X.Orderdate),0) AS DayDiff FROM (SELECT T.Product,T.Orderdate, LAG(T.Orderdate) OVER( ORDER BY ORDERDATE) AS PREVDATE  FROM Test T )X
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-20
        • 2010-11-07
        相关资源
        最近更新 更多