Sql 两个日期之间的天数取决于ID

Sql 两个日期之间的天数取决于ID,sql,between,days,Sql,Between,Days,我有ID和订单日期栏;我想做的是为每个ID显示下一个订单日期和当前日期之间的差异 桌子 身份证件 订购日期 1. 01/12/2020 2. 15/09/2020 2. 01/10/2020 3. 31/12/2020 4. 01/10/2020 4. 03/10/2020 4. 01/12/2020 5. 31/01/2020 首先,在SQL中,您应该有一个包含天数的列——一个数字。不要将值转换为字符串。您所称的'N/A'应该是NULL值 要执行所需操作,请使用lag()。是这样的: sele

我有ID和订单日期栏;我想做的是为每个ID显示下一个订单日期和当前日期之间的差异

桌子

身份证件 订购日期 1. 01/12/2020 2. 15/09/2020 2. 01/10/2020 3. 31/12/2020 4. 01/10/2020 4. 03/10/2020 4. 01/12/2020 5. 31/01/2020
首先,在SQL中,您应该有一个包含天数的列——一个数字。不要将值转换为字符串。您所称的
'N/A'
应该是
NULL

要执行所需操作,请使用
lag()
。是这样的:

select t.*,
       (order_date -
        lag(order_date) over (partition by id order by order_date)
       ) as date_diff
from t;

请注意,并非所有数据库都支持日期
-
。日期操作的确切语法通常因数据库而异。

首先,在SQL中,您应该有一个包含天数的列——一个数字。不要将值转换为字符串。您所称的
'N/A'
应该是
NULL

要执行所需操作,请使用
lag()
。是这样的:

select t.*,
       (order_date -
        lag(order_date) over (partition by id order by order_date)
       ) as date_diff
from t;

请注意,并非所有数据库都支持日期
-
。日期操作的确切语法通常因数据库而异。

值77之间的天数似乎是错误的。见下面的结果。这与上述解决方案相同,仅使用datediff()

身份证件 订单日期 隔日 1. 2020-12-01 00:00:00.000 无效的 2. 2020-09-15 00:00:00.000 16 2. 2020-10-01 00:00:00.000 无效的 3. 2020-12-31 00:00:00.000 无效的 4. 2020-10-01 00:00:00.000 2. 4. 2020-10-03 00:00:00.000 59 4. 2020-12-01 00:00:00.000 无效的 5. 2020-01-31 00:00:00.000 无效的
77之间的天数似乎是错误的。见下面的结果。这与上述解决方案相同,仅使用datediff()

身份证件 订单日期 隔日 1. 2020-12-01 00:00:00.000 无效的 2. 2020-09-15 00:00:00.000 16 2. 2020-10-01 00:00:00.000 无效的 3. 2020-12-31 00:00:00.000 无效的 4. 2020-10-01 00:00:00.000 2. 4. 2020-10-03 00:00:00.000 59 4. 2020-12-01 00:00:00.000 无效的 5. 2020-01-31 00:00:00.000 无效的
用你正在使用的数据库标记你的问题。用你正在使用的数据库标记你的问题。我认为你应该理智地检查你的逻辑-这意味着从2020年9月15日到2020年12月1日之间有16天-77看起来更正确,实际上,你是对的-我错过了第一行/第二行是不同ID!自我终结我认为你应该理智地检查你的逻辑-这意味着从2020年9月15日到2020年12月1日之间有16天-77看起来更准确,实际上,你是对的-我错过了第一/第二排是不同的ID!自我终止