在同一时间汇总列。如果该小时没有记录,则将值存储为0

时间:2015-11-25 22:04:38

标签: sql database bigdata presto

我正在使用PrestoDB并且需要在同一小时内汇总列,如果没有该小时的记录,则将值存储为0

我有这张桌子:

Date                    |Instances
2015-10-12 06:15:00.000 |2   
2015-10-12 06:45:00.000 |5
2015-10-12 04:15:00.000 |2
2015-10-12 04:25:00.000 |3
2015-10-12 03:15:00.000 |5
2015-10-12 02:15:00.000 |6
2015-10-12 01:15:00.000 |6

我需要这个输出:

     TIMEHOUR | INSTANCESUM
     6        | 7
---> 5        | 0 <---
     4        | 5
     3        | 5
     2        | 6
     1        | 6

我怎么能这样做?我找到了一些关于使用临时表的信息。我怎么能在Presto db中做到这一点?在其他帖子中我不清楚答案,而且是针对MySQL的。同样的事情对我有用吗?

我有什么基本的SQL方法可以做到这一点吗?似乎是人们需要使用的常见简单事物。

1 个答案:

答案 0 :(得分:0)

一个选项是创建一个小时表(你只做一次)

插入1,2,3,4,5,6,7,8,9,10 ...... 24

然后LEFT JOIN到你的主表这样......

SELECT HoursTable.Hour, SUM(MainTable.Hour)
FROM HoursTable
LEFT JOIN MainTable
ON HoursTable.Hour = MainTable.Hour
GROUP BY HoursTable.Hour

如果小时是日期字段的一部分,则您必须拉出列的小时部分。

LEFT JOIN将返回HoursTable中的所有记录以及主表中的任何匹配记录。因此,对于上面的示例,您将在第5小时返回0的总和。

创建表示例...

CREATE TABLE Hours (Hour INT);

INSERT Hours VALUES (0);
INSERT Hours VALUES (1);
INSERT Hours VALUES (2);
INSERT Hours VALUES (3);
INSERT Hours VALUES (4);
INSERT Hours VALUES (5);
INSERT Hours VALUES (6);
INSERT Hours VALUES (7);
INSERT Hours VALUES (8);
INSERT Hours VALUES (9);
INSERT Hours VALUES (10);
INSERT Hours VALUES (11);
INSERT Hours VALUES (12);
INSERT Hours VALUES (13);
INSERT Hours VALUES (14);
INSERT Hours VALUES (15);
INSERT Hours VALUES (16);
INSERT Hours VALUES (17);
INSERT Hours VALUES (18);
INSERT Hours VALUES (19);
INSERT Hours VALUES (20);
INSERT Hours VALUES (21);
INSERT Hours VALUES (22);
INSERT Hours VALUES (23);