[英]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.