缺少 ID 时序列中的数字之间的差异
difference between numbers in sequence when ids missing
我正在尝试获取具有 DateOrderID 的日期之间的月数,以便将它们放入订单(最早的日期是 1,第二个是 2,等等)。我的问题是,因为 DateOrder ID 是手动输入的,所以我有一些记录缺少 DateOrderID,所以我的查询 returns 该字段为 NULL。我的(虚拟)代码是:
Select a.PersonID
,a.Date
,a.DateOrderID
,case when a.DateOrderID = 1 then 'First Date'
else convert(varchar(5),datediff(month, b.Date, a.Date)) end as Months_Between
from OrderTable a
left join
OrderTable b
on a.PersonID = b.PersonID and a.DateOrderID = b.DateOrderID +1
目前returns
PersonID Date DateOrder Months_Between
101 20150401 1 First Date
101 20160621 2 14
101 20170301 3 9
102 20110506 1 First Date
102 20140817 3 NULL
102 20160906 4 25
我想要的结果是将 PersonID 102 的 NULL 替换为类似 'Missing ID' 的内容。我在案例陈述中尝试了一些事情但没有成功,有什么想法吗?
SELECT a.PersonID ,
a.Date ,
a.DateOrderID ,
CASE
WHEN a.DateOrderID = 1
THEN 'First Date'
ELSE ISNULL(CONVERT(VARCHAR(5),DATEDIFF(MONTH, b.Date, a.Date)),'Missing Date')
END AS Months_Between
FROM OrderTable a
LEFT JOIN OrderTable b
ON a.PersonID = b.PersonID
AND a.DateOrderID = b.DateOrderID +1
我正在尝试获取具有 DateOrderID 的日期之间的月数,以便将它们放入订单(最早的日期是 1,第二个是 2,等等)。我的问题是,因为 DateOrder ID 是手动输入的,所以我有一些记录缺少 DateOrderID,所以我的查询 returns 该字段为 NULL。我的(虚拟)代码是:
Select a.PersonID
,a.Date
,a.DateOrderID
,case when a.DateOrderID = 1 then 'First Date'
else convert(varchar(5),datediff(month, b.Date, a.Date)) end as Months_Between
from OrderTable a
left join
OrderTable b
on a.PersonID = b.PersonID and a.DateOrderID = b.DateOrderID +1
目前returns
PersonID Date DateOrder Months_Between
101 20150401 1 First Date
101 20160621 2 14
101 20170301 3 9
102 20110506 1 First Date
102 20140817 3 NULL
102 20160906 4 25
我想要的结果是将 PersonID 102 的 NULL 替换为类似 'Missing ID' 的内容。我在案例陈述中尝试了一些事情但没有成功,有什么想法吗?
SELECT a.PersonID ,
a.Date ,
a.DateOrderID ,
CASE
WHEN a.DateOrderID = 1
THEN 'First Date'
ELSE ISNULL(CONVERT(VARCHAR(5),DATEDIFF(MONTH, b.Date, a.Date)),'Missing Date')
END AS Months_Between
FROM OrderTable a
LEFT JOIN OrderTable b
ON a.PersonID = b.PersonID
AND a.DateOrderID = b.DateOrderID +1