2012-07-06 99 views
0

我需要第1行和第2行之间的时间差。然后是第2行和第3行。 有没有可以做到这一点的查询?我的同事已经认为这是不可能的。 非常感谢您的帮助提前。如何获得SQL中每个后续行之间的时间差?

2012-03-08 15:08:02.260 
2012-03-08 15:08:07.180 
2012-03-08 15:15:09.220 
2012-03-08 15:15:09.330 
2012-03-08 15:15:09.457 
2012-03-23 13:06:19.913 
2012-03-23 13:06:20.980 
2012-03-23 13:06:21.440 
2012-03-23 13:06:21.480 
2012-03-23 13:06:21.550 
2012-03-23 13:06:21.567 

回答

1

您对颗粒度并不清楚,但您可以根据需要调整日期部分。你也应该告诉你的同事关于互联网。 :-)

;WITH x AS 
(
    SELECT col, rn = ROW_NUMBER() OVER (ORDER BY col) 
    FROM dbo.table 
) 
SELECT x.col, 
    s = DATEDIFF(SECOND, x2.col, x.col), 
    m = DATEDIFF(MINUTE, x2.col, x.col), 
    d = DATEDIFF(DAY, x2.col, x.col) 
FROM x LEFT OUTER JOIN x AS x2 
ON x.rn = x2.rn + 1; 

结果:

col      s  m  d 
----------------------- ------- ------- ---- 
2012-03-08 15:08:02.260 NULL  NULL  NULL 
2012-03-08 15:08:07.180 5  0  0 
2012-03-08 15:15:09.220 422  7  0 
2012-03-08 15:15:09.330 0  0  0 
2012-03-08 15:15:09.457 0  0  0 
2012-03-23 13:06:19.913 1288270 21471 15 
2012-03-23 13:06:20.980 1  0  0 
2012-03-23 13:06:21.440 1  0  0 
2012-03-23 13:06:21.480 0  0  0 
2012-03-23 13:06:21.550 0  0  0 
2012-03-23 13:06:21.567 0  0  0 
相关问题