![](/img/trans.png)
[英]How to subtract consecutive rows from different tables in MS SQL Server 2012?
[英]How to subtract two consecutive rows in MS SQL Server?
表格如下:
id | location | datetime
------| ---------| --------
CD123 | loc001 | 2010-10-21 13:30:15
ZY123 | loc001 | 2010-10-21 13:40:15
YU333 | loc001 | 2010-10-21 13:41:00
AB456 | loc002 | 2011-1-21 14:30:30
FG121 | loc002 | 2011-1-21 14:31:00
BN010 | loc002 | 2011-1-21 14:32:00
假設該表已按日期時間升序排序。 我試圖找到一個位置內兩個連續行之間的經過時間(以秒為單位)。
結果表應該是:
| location | elapse
| loc001 | 600
| loc001 | 45
| loc002 | 30
| loc002 | 60
由於id
是隨機生成的,因此很難在查詢中編寫類似a.id = b.id + 1
的內容。 並且僅連續減去同一位置內的行,而不跨不同位置。
我應該如何在MS SQL Server中編寫查詢來完成該查詢?
在SQL Server 2012及更高版本中,您可以使用LEAD
或LAG
SELECT
location,
SUM(DATEDIFF(SECOND, DateTime,
Lead(DateTime, 1) OVER(PARTITION BY location ORDER BY DateTime))) Elepase
FROM
tableName
GROUP BY
location
with Result as
(Select *, ROW_NUMBER() Over (order by location,datetime) RowID from table_name )
Select R1.location,DATEDIFF(SECOND,R2.datetime,R1.datetime) from Result R1 Inner join Result R2 on (R1.RowID=R2.RowID+1 and R1.location=r2.location)
創建cte
並使用lead
在同一行獲取datetime和next_datetime。 然后使用此CTE與datediff
計算
WITH cte
AS
(
SELECT location
, datetime
, lead(datetime,1) OVER (patition BY location ORDER BY datetime asc) next_datetime
from tbl)
SELECT location
, datediff(ss,next_datetime,datetime) Elepase
FROM cte
您可以這樣嘗試:
select s.location,
s.datetime,
datediff(ss, s.datetime, s.prev_datetime)
from (
select location,
datetime,
lead(datetime) over (partition by location order by datetime ) prev_datetime
from Table1
) s
where s.prev_datetime is not null
order by s.location,
s.datetime desc
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.