需要創建一個查詢,該查詢會獲取位設置爲ON/OFF的時間摘要。TSQL - 帶條件的時間總和列
例子:
╔═══════════════════════════╗
║ TABLE ║
╠════╦════════╦═════╦═══════╣
║ ID ║ TIME ║ BIT ║ VALUE ║
╠════╬════════╬═════╬═══════╣
║ 1 ║ 13:40 ║ 1 ║ 5 ║
║ 2 ║ 13:45 ║ 1 ║ 3 ║
║ 3 ║ 13:50 ║ 1 ║ 1 ║
║ 4 ║ 13:55 ║ 0 ║ 2 ║
║ 5 ║ 14:00 ║ 0 ║ 7 ║
║ 6 ║ 14:05 ║ 1 ║ 3 ║
║ 7 ║ 14:10 ║ 1 ║ 4 ║
║ 8 ║ 14:15 ║ 0 ║ 2 ║
║ 9 ║ 14:20 ║ 1 ║ 2 ║
╚════╩════════╩═════╩═══════╝
我想有TIME
(和VALUE
- 簡單的一個)總總結時BIT
是SET ON
:
13:40 - 13:50 = 10 mins
14:05 - 14:10 = 5 mins
14:20 = no end time, 0 mins
-----------------------------------------
15 mins
有沒有發現:
- How to sum up time field in SQL Server =很好的問題,但有靜態的時間開始(0:00:00),這將不會在這種情況下
- Aggregate function over a given time interval工作=有聚集而不是空調,並適用於所有數據
我想,這可能是作爲遞歸函數完成(傳遞最後處理的日期時間),它將通過處理的最後日期,並且計算自BIT
爲ON
以來的日期時間。
SQL查詢求和值(容易的):
SELECT SUM(Value)
FROM Table
WHERE Bit = 1
我應該如何獲得分鐘(時間)的總價值,在此期間是BIT
設置ON
?
編輯:查詢,可用於測試:
DECLARE @Table TABLE(
ID INT Identity(1,1) PRIMARY KEY,
[TIME] DATETIME NOT NULL,
[BIT] BIT NOT NULL,
[VALUE] INT NOT NULL
);
INSERT INTO @Table([TIME],[BIT],[VALUE]) VALUES('13:40',1,5);
INSERT INTO @Table([TIME],[BIT],[VALUE]) VALUES('13:45',1,3);
INSERT INTO @Table([TIME],[BIT],[VALUE]) VALUES('13:50',1,1);
INSERT INTO @Table([TIME],[BIT],[VALUE]) VALUES('13:55',0,2);
INSERT INTO @Table([TIME],[BIT],[VALUE]) VALUES('14:00',0,7);
INSERT INTO @Table([TIME],[BIT],[VALUE]) VALUES('14:05',1,3);
INSERT INTO @Table([TIME],[BIT],[VALUE]) VALUES('14:10',1,4);
INSERT INTO @Table([TIME],[BIT],[VALUE]) VALUES('14:15',0,2);
INSERT INTO @Table([TIME],[BIT],[VALUE]) VALUES('14:20',1,2);
SELECT * FROM @Table;
這真的很容易閱讀,也很容易理解。感謝你的回答! – Tatranskymedved
更新:使用OVER(ORDER BY [時間])而不是(BY [id])。因爲ID不一定是連續的。它可能是guid或自然的關鍵 – usart