Sql server 计算同一列中日期之间的差异
我正在尝试计算同一列中日期之间的差异,但迄今为止未成功。Sql server 计算同一列中日期之间的差异,sql-server,tsql,datediff,Sql Server,Tsql,Datediff,我正在尝试计算同一列中日期之间的差异,但迄今为止未成功。 这是我正在使用的数据,这是我到目前为止所做的代码。我提供的脚本供您参考。希望能有帮助 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
这是我正在使用的数据,这是我到目前为止所做的代码。我提供的脚本供您参考。希望能有帮助
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
每个产品只有一行,所以如果你加入它,你将加入同一行与它本身,导致datediff为零,如你所见 相反,您可以根据
产品延迟订单日期,并将其用于日期差异:
SELECT product,
orderdate,
COALESCE(DATEDIFF(DAY, overdate, LAG(overdate) OVER (ORDER BY product)),0)
FROM test
ORDER BY 1
尝试滞后功能:
SELECT
product,
ISNULL(
DATEDIFF(DAY, lag(orderdate,1) OVER (ORDER BY orderdate), orderdate),0) AS DIF
FROM TEST
ORDER BY PRODUCT
下面的查询将满足您的问题
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
这管用!非常感谢你!我将学习滞后函数,因为你们中的许多人都使用它来解决这个问题。如果你接受了答案,这将对其他用户有所帮助。
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