2017-07-28 33 views
0

如果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 

这里是我当前的结果: enter image description here

我想要做的就是最后可能记录,检查是否存在之前已经存在。如果没有比较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 

有这结果: enter image description here

而且使用此查询:

SELECT a.* 
FROM [dbo].[Krdocs_hist] a 
WHERE RequestId = 1 

有这样的结果: enter image description here

+0

你能提供的样本数据和期望的结果? – zzT

+0

你是什么意思的样本数据? 至于期望的结果,我需要得到一行: ID:39,RequestID:1,KrStatus:80,CrDate:2017.06.09和一个从做ROW 7减去ROW 6 UpdateDate值得到的值的列。 –

+0

样本数据是指从中导出结果的原始表格数据(的一部分)。然后我们可以看到正在发生什么转变。 – ADyson

回答

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 
+0

我得到的结果是TimeDifference 0,即使它超过了24小时。 –

+0

消息11305,级别15,状态10,行58 并行数据仓库(PDW)功能未启用。 当试图使用LAG,并且更新仍然返回0. –

+0

原来我使用2008版本,这就是为什么我得到上述错误。 –