2015-11-25 18 views
1

我正在使用PrestoDB並需要在同一小時內一起總計列,如果沒有該小時的記錄,則存儲值爲0將同一小時內的列總計在一起。如果沒有該小時的記錄,則存儲值爲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數據庫中做到這一點?在其他文章中我不清楚這些答案,並且是針對MySQL的。同樣的事情對我有用嗎?

有沒有基本的SQL方法可以做到這一點?看起來像人們需要使用的常見簡單事物。

+0

GROUP你的結果( )'實例。 –

+0

@ConsiderMe,這不會給他不存在的時間,這是 – Harsh

+0

@Harsh同意的要求,OP需要生成數小時的日期,然後左連接到它。 –

回答

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中的所有記錄以及主表中的任何匹配記錄。因此,對於你上面的例子,你會回到0總和小時5

通過提取小時,從你的`Date`欄和'總和創建表實例...

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); 
+0

我最大的問題是你如何創建一個小時表?我是SQL新手,你遺漏的是我不知道如何解決這個問題的事情。 – Javier

+0

添加了創建表格示例 – Doug

相關問題