2013-02-13 111 views
21

我有一個名爲activity_dt datetime和數據如下:日期時間組的日期和時間

2/5/2013 9:24:00 AM 
2/7/2013 7:17:00 AM 

如何通過日期和時間做我組?

+1

你用什麼rdbms? – 2013-02-13 03:38:08

回答

47

SQL服務器:

SELECT [activity_dt], count(*) 
FROM table1 
GROUP BY DATEPART(day, [activity_dt]), DATEPART(hour, [activity_dt]); 

甲骨文:

SELECT [activity_dt], count(*) 
FROM table1 
GROUP BY TO_CHAR(activity_dt, 'DD'), TO_CHAR(activity_dt, 'hh'); 

的MySQL:

SELECT [activity_dt], count(*) 
FROM table1 
GROUP BY hour(activity_dt) , day(activity_dt) 
+1

我正在使用mysql。有什麼方法可以顯示日期嗎?例如:2/5/2013 – Yeo 2013-02-13 03:57:35

+0

是指格式化日期,比如2/5/2013? SELECT DATE_FORMAT(activity_dt,'%e /%c /%Y') – 2013-02-13 04:05:24

+0

它表示語法錯誤 – Yeo 2013-02-13 04:14:58

1
SELECT [activity_dt], COUNT(*) as [Count] 
    FROM 
(SELECT dateadd(hh, datediff(hh, '20010101', [activity_dt]), '20010101') as [activity_dt] 
    FROM table) abc 
GROUP BY [activity_dt] 
7

使用MySQL,我通常這樣做的:

SELECT count(id), ... 
FROM quote_data 
GROUP BY date_format(your_date_column, '%Y%m%d%H') 
order by your_date_column desc; 

或者在同樣的想法,如果你需要輸出的日期/時間:如果您在日期列指定索引

SELECT count(id) , date_format(your_date_column, '%Y-%m-%d %H') as my_date 
FROM your_table 
GROUP BY my_date 
order by your_date_column desc; 

中,MySQL應該能夠用它來加快東西小。

+0

我不得不用%H替換%h,用0-24排序對我來說效果更好,而不是0-12和0-12。 – Melvin 2016-04-03 09:24:44

+0

@Melvin你說得對,我糾正了我的答案。 – Simon 2016-04-03 11:28:07

+0

只是關於索引使用情況的說明。雖然date_format確實允許使用索引,但只有在使用特定/有限集合函數時,纔會優化使用索引(鬆散索引掃描)。通常,只有MIN()和MAX()應用於單列才允許進行索引掃描,並且只要指定DISTINCT關鍵字,也可以使用其他聚合。來源:[鏈接](http://dev.mysql.com/doc/refman/5.7/en/group-by-optimization.html) – JavoSN 2016-06-26 19:21:28