【发布时间】:2015-05-30 19:30:00
【问题描述】:
让我们切入正题。我有一张看起来像这样的表(使用 SQL Server 2014):
演示: http://sqlfiddle.com/#!6/75f4a/1/0
CREATE TABLE TAB (
DT datetime,
VALUE float
);
INSERT INTO TAB VALUES
('2015-05-01 06:00:00', 12),
('2015-05-01 06:20:00', 10),
('2015-05-01 06:40:00', 11),
('2015-05-01 07:00:00', 14),
('2015-05-01 07:20:00', 15),
('2015-05-01 07:40:00', 13),
('2015-05-01 08:00:00', 10),
('2015-05-01 08:20:00', 9),
('2015-05-01 08:40:00', 5),
('2015-05-02 06:00:00', 19),
('2015-05-02 06:20:00', 7),
('2015-05-02 06:40:00', 11),
('2015-05-02 07:00:00', 9),
('2015-05-02 07:20:00', 7),
('2015-05-02 07:40:00', 6),
('2015-05-02 08:00:00', 10),
('2015-05-02 08:20:00', 19),
('2015-05-02 08:40:00', 15),
('2015-05-03 06:00:00', 8),
('2015-05-03 06:20:00', 8),
('2015-05-03 06:40:00', 8),
('2015-05-03 07:00:00', 21),
('2015-05-03 07:20:00', 12),
('2015-05-03 07:40:00', 7),
('2015-05-03 08:00:00', 10),
('2015-05-03 08:20:00', 4),
('2015-05-03 08:40:00', 10)
我需要:
- 每小时总和
- 为每一天选择最小的“小时总和”
- 选择该总和发生的时间
换句话说,我想要一个如下所示的表格:
DATE | SUM VAL | ON HOUR
--------------------------
2015-03-01 | 24 | 8:00
2015-03-02 | 22 | 7:00
2015-03-03 | 24 | 6:00
前两点非常简单(查看 sqlfiddle)。我对第三个有问题。我不能只是喜欢选择 Datepart(HOUR, DT) 因为它必须被聚合。我试图使用 JOINS 和 WHERE 子句,但没有成功(某些值可能在表中出现多次,这会引发错误)。
我对 SQL 有点陌生,但我被卡住了。需要你的帮助! :)
【问题讨论】:
-
在您的示例数据中,两个不同的小时对于第三个具有相同的值总和 (24)。您希望返回两条记录还是只返回一条记录,如果需要,返回哪一条?
-
@jpw 我是故意这样做的。我只想选择一行 - “较小”的小时。我看到了很多不同的解决方案,明天将在工作台上使用真实数据进行尝试。
-
@rafakob 好吧,那是我的猜测。
标签: sql sql-server tsql