【发布时间】:2015-11-10 05:45:22
【问题描述】:
我使用的是 SQL Server 2012。我有一个 QC 检查日期,其中包含 ID、事件和事件日期。以下是数据供参考。
QUALITY_CHECK_NO EVENT DATE
101 QC EVENT 1 2015-01-07 00:00:00
101 QC EVENT 2 2015-08-10 00:00:00
101 QC EVENT 3 2015-08-13 00:00:00
101 QC EVENT 4 2015-08-25 00:00:00
101 QC EVENT 5 2015-08-11 00:00:00
101 QC EVENT 6 2015-08-13 00:00:00
101 QC EVENT 7 2015-08-18 00:00:00
101 QC EVENT 8 2015-08-19 00:00:00
101 QC EVENT 9 2015-08-24 00:00:00
101 QC EVENT 10 2015-08-25 00:00:00
101 QC EVENT 11 2015-08-25 00:00:00
101 QC EVENT 12 2015-09-11 00:00:00
101 QC EVENT 13 2015-09-25 00:00:00
102 QC EVENT 1 2015-01-07 00:00:00
102 QC EVENT 2 2015-08-10 00:00:00
102 QC EVENT 3 2015-08-26 00:00:00
102 QC EVENT 4 2015-08-27 00:00:00
102 QC EVENT 5 2015-08-21 00:00:00
102 QC EVENT 6 2015-08-20 00:00:00
102 QC EVENT 7 2015-08-26 00:00:00
102 QC EVENT 8 2015-08-26 00:00:00
102 QC EVENT 9 2015-08-27 00:00:00
102 QC EVENT 10 2015-08-27 00:00:00
102 QC EVENT 11 2015-08-27 00:00:00
102 QC EVENT 12 2015-09-11 00:00:00
102 QC EVENT 13 2015-09-25 00:00:00
103 QC EVENT 1 2015-01-07 00:00:00
103 QC EVENT 2 2015-08-10 00:00:00
103 QC EVENT 3 2015-08-12 00:00:00
103 QC EVENT 4 2015-08-25 00:00:00
103 QC EVENT 5 2015-08-21 00:00:00
103 QC EVENT 6 2015-08-11 00:00:00
103 QC EVENT 7 2015-08-20 00:00:00
103 QC EVENT 8 2015-08-20 00:00:00
103 QC EVENT 9 2015-08-24 00:00:00
103 QC EVENT 10 2015-08-25 00:00:00
103 QC EVENT 11 2015-08-25 00:00:00
103 QC EVENT 12 2015-09-11 00:00:00
103 QC EVENT 13 2015-09-25 00:00:00
104 QC EVENT 1 2015-10-20 00:00:00
104 QC EVENT 2 2015-10-21 00:00:00
104 QC EVENT 3 2015-10-21 00:00:00
104 QC EVENT 4 2015-10-23 00:00:00
我想查找每个 QualityCheckNo 的第一个事件日期和下一行之间的天数差异。我尝试使用 CTE,但是我得到了每行之间的天数差异,而不是我想要的。
基本上,我需要找出与 QC Event 1 和 EVENTS 相差多少天。像下面这样..
QUALITY_CHECK_NO EVENT DATE DaysDiff
101 QC EVENT 1 2015-01-07 00:00:00 0
101 QC EVENT 2 2015-08-10 00:00:00 215
101 QC EVENT 3 2015-08-13 00:00:00 218
101 QC EVENT 4 2015-08-25 00:00:00 230
101 QC EVENT 5 2015-08-11 00:00:00 216
101 QC EVENT 6 2015-08-13 00:00:00 218
下面是我使用的sql代码。
WITH tableNumbered AS (
SELECT QUALITY_CHECK_NO, EVENT, DATE, ROW_NUMBER() OVER (PARTITION BY SiteID ORDER BY SITEID, RNUM) as rNum FROM [db_lexitas_ods].[dbo].[vw_GetPvtDocumentTAT] )
SELECT t.*,
DATEDIFF(day,t2.[DATE],t.[DATE])
as Daysdiff
FROM tableNumbered t
LEFT JOIN tableNumbered t2 ON t.[QUALITY_CHECK_NO] = t2.[QUALITY_CHECK_NO] AND t2.rNum + 1 = t.rNum
【问题讨论】:
-
你的数据库/版本是什么
-
由于 [括号] 假设 SQL Server。您的示例 SQL 与示例数据不匹配。我应该如何运行它?自己编架构?如果您需要帮助,请方便我们。
-
您好,代码已更新,代码正在查找上一行和当前行的天数差异。我怎么想根据第一行和其他行找到天差。
-
@KarthikVenkatraman - 您可以使用sqlfiddle.com 并使用数据重新创建表格,然后共享相关链接吗?我们这样玩会容易得多
标签: sql sql-server-2012 common-table-expression