簡體   English   中英

SQl比較時間彼此相鄰的所有行的差異

[英]SQl Compare diffrence of all rows next to each other to the Time

我有帶時間的Sql列。 如果彼此相鄰的兩列之間的時間差大於1小時,我想輸出它們

     04:05:44
     06:07:48
     08:15:44
     09:05:22
     11:15:27
     11:35:18
     12:16:54

我的輸出應該是這樣的

     04:05:44 - 06:07:48
     06:07:48 - 08:15:44
     09:05:22 - 11:15:27

是否可以在Sql中編寫這樣的查詢? 如果可能,我應該從SQL了解什么來執行該查詢? (我知道SQL的基本級別,正在學習)

謝謝。

您可以像這樣使用CTE和ROW_NUMBER

CREATE TABLE #Dates(DateColumn TIME)
INSERT INTO #Dates(DateColumn) VALUES
    ('04:05:44'),
    ('06:07:48'),
    ('08:15:44'),
    ('09:05:22'),
    ('11:15:27'),
    ('11:35:18'),
    ('12:16:54');*/

WITH CTE AS
(
    SELECT *, ROW_NUMBER() OVER (ORDER BY DateColumn) AS RowNumb
    FROM #Dates AS D
)
SELECT *
FROM CTE AS C
LEFT JOIN CTE AS C2 ON C.RowNumb = C2.RowNumb - 1
WHERE DATEDIFF(MINUTE, C.DateColumn, C2.DateColumn) >= 60

對於MSSQL 2008,您可以使用www.Studiosql.nl提供的答案

以下代碼可根據需要在MSSQL Server 2012中顯示結果。

您可以為此使用LAG TSQL函數

CREATE TABLE #time (timeValue TIME)

INSERT INTO #time 
values
     ('04:05:44'),
     ('06:07:48'),
     ('08:15:44'),
     ('09:05:22'),
     ('11:15:27'),
     ('11:35:18'),
     ('12:16:54');

SELECT temp.*
from
(SELECT timevalue, case when datediff(HH, lag(timevalue,1,timevalue) OVER(order by TIMEVALUE),timevalue) > 1 THEN CONCAT(lag(timevalue,1,timevalue) OVER(order by TIMEVALUE),' - ',timevalue) else null END AS displayvalue 
FROM #time) as temp
where temp.displayValue is not null

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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