簡體   English   中英

如何在MS SQL Server中減去兩個連續的行?

[英]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及更高版本中,您可以使用LEADLAG

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)

您有兩種選擇:

添加一個新的行號列 ,然后在ID上自行加入,例如[NEW ID] = [NEW ID]-1。然后可以進行減法運算,即Table1。[New ID]-Table2。[New ID]

使用LAG功能 ,它是上述方法的快捷方式。 只要您使用的是SQL2012 +

創建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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM