需要创建一个查询,该查询会获取位设置为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