如何在SQL Server中获取日期的差异
如果ID是最低和最新和最差的两个记录之间的差异,我无法编写查询以获取UpdateDate和2条记录的CreationDate之间的差异最近UpdateDate。 这里是我的查询:如何在SQL Server中获取日期的差异
SELECT
a.ID, a.RequestID, b.KrStatus, b.CrDate , b.UpdateDate,
DATEDIFF (HOUR, b.CrDate, b.UpdateDate) AS TimeDifference,
CASE WHEN a.ID = (SELECT MAX(a.ID) FROM [dbo].[Krdocs_hist] a WHERE a.RequestID = 1)
THEN 'YES'
ELSE 'NO'
END AS isMax,
CASE WHEN a.ID = (SELECT MIN(a.ID) FROM [dbo].[Krdocs_hist] a WHERE a.RequestID = 1)
THEN 'YES'
ELSE 'NO'
END AS isMi
FROM [dbo].[Krdocs_hist] a, [dbo].Krdocs_Details_hist b
WHERE
a.RequestId = b.RequestId
and a.ID = b.ID
and a.RequestId = 1
ORDER BY b.RequestID
我想要做的就是最后可能记录,检查是否存在之前已经存在。如果没有比较UpdateDate和的crdate(UpdateDate负的crdate如果有这个,我想要做的UpdateDate减去前UpdateDate之前的纪录
使用此查询:。
SELECT b.Id, b.RequestId, b.UpdateDate, b.KrStatus
FROM [dbo].[Krdocs_Details_hist] b
WHERE b.RequestId = 1
而且使用此查询:
SELECT a.*
FROM [dbo].[Krdocs_hist] a
WHERE RequestId = 1
UPDATE 由于LAG可从2012 SQL,您可以使用如下:
SELECT
ID,
RequestID,
CrDate,
UpdateDate,
KrStatus,
DATEDIFF(HOUR, PreviousUpdateDate, UpdateDate) as TimeDifference
FROM
(SELECT
ID,
RequestID,
CrDate,
UpdateDate,
KrStatus,
LAG(UpdateDate, 1, CrDate) OVER (ORDER BY YEAR(ID)) AS PreviousUpdateDate
FROM [dbo].Krdocs_Details_hist) as tmp
我想你可以尝试这样的:
SELECT
CASE
WHEN COUNT(*) <= 1 THEN DATEDIFF(HOUR,
(SELECT CrDate FROM [dbo].Krdocs_Details_hist),
(SELECT UpdateDate FROM [dbo].Krdocs_Details_hist))
WHEN COUNT(*) > 1 THEN DATEDIFF(HOUR,
(SELECT MAX(UpdateDate) FROM [dbo].Krdocs_Details_hist WHERE UpdateDate < (SELECT MAX(UpdateDate) FROM [dbo].Krdocs_Details_hist)),
(SELECT MAX(UpdateDate) FROM [dbo].Krdocs_Details_hist))
END AS TimeDifference
FROM [dbo].Krdocs_Details_hist
我得到的结果是TimeDifference 0,即使它超过了24小时。 –
消息11305,级别15,状态10,行58 并行数据仓库(PDW)功能未启用。 当试图使用LAG,并且更新仍然返回0. –
原来我使用2008版本,这就是为什么我得到上述错误。 –
你能提供的样本数据和期望的结果? – zzT
你是什么意思的样本数据? 至于期望的结果,我需要得到一行: ID:39,RequestID:1,KrStatus:80,CrDate:2017.06.09和一个从做ROW 7减去ROW 6 UpdateDate值得到的值的列。 –
样本数据是指从中导出结果的原始表格数据(的一部分)。然后我们可以看到正在发生什么转变。 – ADyson