如何获得两行之间的日期差异(对于每个同一组)? SQL
How to get the difference in dates between 2 rows (for each same group)? SQL
嘿,我有这个 Table:
Case Test Result CreationDate
--------------------------------------------------
00123 P 4.7 2022-05-22 10:45:00
00123 P Cancelled 2022-05-22 09:46:00
00548 P 6.8 2022-05-22 09:45:00
00289 P 4.4 2022-04-12 17:34:00
00289 P 2022-04-12 16:21:00
00118 P 4.3 2022-04-10 12:56:00
00118 P 4.2 2022-04-10 12:34:00
有时结果是 'Cancelled'/NULL/Blank/whatever... 他们会再次进行测试(有时即使结果正常,例如 00118)
我想知道每个案例的 CreationDate 之间的区别。
有时他们会做测试,所以只有一个案例,没关系:)
理想的输出(我不关心差异如何显示,只要它不是 nvarchar):
Case Test Result CreationDate Difference
---------------------------------------------------------------------------------
00123 P 4.7 2022-05-22 10:45:00 00:59:00 /59:00 /59 (I dont care how as long as I could do avarage later)
00123 P Cancelled 2022-05-22 09:46:00 NULL/ Blank
00548 P 6.8 2022-05-22 09:45:00 NULL/ Blank
00289 P 4.4 2022-04-12 17:34:00 01:13:00/ 01:13/ 73
00289 P 2022-04-12 16:21:00 NULL/ Blank
00118 P 4.3 2022-04-10 12:56:00 00:22:00/ 00:22/ 22
00118 P 4.2 2022-04-10 12:34:00 NULL/ Blank
这是针对上述问题的 LAG 函数的简单版本。
您也可以使用 LEAD 函数来检索下一个日期。
注意避免在 PreviousDate 列中使用 NULL ISNULL,这只是为了确保我们有一些东西 return 并指出 date/times 相同的地方。
WITH CTETestValues AS (
SELECT
[Case],
Test,
Result,
CreationDate,
ISNULL(LAG(CreationDate,1)OVER(PARTITION BY [Case] ORDER BY CreationDate),CreationDate) PreviousDate
FROM dbo.TestValues
)
SELECT
[Case],
Test,
Result,
CreationDate,
PreviousDate,
DATEDIFF(second,PreviousDate,CreationDate) LapsedSeconds
FROM CTETestValues
希望这对您有所帮助。
嘿,我有这个 Table:
Case Test Result CreationDate
--------------------------------------------------
00123 P 4.7 2022-05-22 10:45:00
00123 P Cancelled 2022-05-22 09:46:00
00548 P 6.8 2022-05-22 09:45:00
00289 P 4.4 2022-04-12 17:34:00
00289 P 2022-04-12 16:21:00
00118 P 4.3 2022-04-10 12:56:00
00118 P 4.2 2022-04-10 12:34:00
有时结果是 'Cancelled'/NULL/Blank/whatever... 他们会再次进行测试(有时即使结果正常,例如 00118)
我想知道每个案例的 CreationDate 之间的区别。
有时他们会做测试,所以只有一个案例,没关系:)
理想的输出(我不关心差异如何显示,只要它不是 nvarchar):
Case Test Result CreationDate Difference
---------------------------------------------------------------------------------
00123 P 4.7 2022-05-22 10:45:00 00:59:00 /59:00 /59 (I dont care how as long as I could do avarage later)
00123 P Cancelled 2022-05-22 09:46:00 NULL/ Blank
00548 P 6.8 2022-05-22 09:45:00 NULL/ Blank
00289 P 4.4 2022-04-12 17:34:00 01:13:00/ 01:13/ 73
00289 P 2022-04-12 16:21:00 NULL/ Blank
00118 P 4.3 2022-04-10 12:56:00 00:22:00/ 00:22/ 22
00118 P 4.2 2022-04-10 12:34:00 NULL/ Blank
这是针对上述问题的 LAG 函数的简单版本。 您也可以使用 LEAD 函数来检索下一个日期。 注意避免在 PreviousDate 列中使用 NULL ISNULL,这只是为了确保我们有一些东西 return 并指出 date/times 相同的地方。
WITH CTETestValues AS (
SELECT
[Case],
Test,
Result,
CreationDate,
ISNULL(LAG(CreationDate,1)OVER(PARTITION BY [Case] ORDER BY CreationDate),CreationDate) PreviousDate
FROM dbo.TestValues
)
SELECT
[Case],
Test,
Result,
CreationDate,
PreviousDate,
DATEDIFF(second,PreviousDate,CreationDate) LapsedSeconds
FROM CTETestValues
希望这对您有所帮助。