Tôi có một datetime gọi activity_dt và các dữ liệu trông như thế này:DateTime nhóm theo ngày và giờ
2/5/2013 9:24:00 AM
2/7/2013 7:17:00 AM
Làm thế nào để tôi nhóm theo ngày và giờ?
Tôi có một datetime gọi activity_dt và các dữ liệu trông như thế này:DateTime nhóm theo ngày và giờ
2/5/2013 9:24:00 AM
2/7/2013 7:17:00 AM
Làm thế nào để tôi nhóm theo ngày và giờ?
SQL Server:
SELECT [activity_dt], count(*)
FROM table1
GROUP BY DATEPART(day, [activity_dt]), DATEPART(hour, [activity_dt]);
Oracle:
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)
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]
Sử dụng MySQL Tôi thường làm điều đó theo cách đó:
SELECT count(id), ...
FROM quote_data
GROUP BY date_format(your_date_column, '%Y%m%d%H')
order by your_date_column desc;
Hoặc trong ý tưởng tương tự, nếu bạn cần để sản xuất các ngày/giờ:
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;
Nếu bạn chỉ định một chỉ mục trên cột ngày của bạn, MySQL sẽ có thể sử dụng nó để tăng tốc độ điều một ít.
Tôi phải thay thế% h bằng% H, sắp xếp với 0-24 hoạt động tốt hơn cho tôi thay vì 0-12 và 0-12. – Melvin
@Melvin Bạn nói đúng, tôi đã sửa lại câu trả lời của mình. – Simon
Chỉ cần lưu ý về việc sử dụng chỉ mục. Mặc dù date_format cho phép chỉ mục được sử dụng, chỉ mục sẽ chỉ được sử dụng tối ưu (quét chỉ mục lỏng lẻo) khi sử dụng các hàm tổng hợp hạn chế/cụ thể. Nói chung, chỉ có MIN() và MAX() được áp dụng cho một cột duy nhất cho phép quét chỉ mục và cũng có các tập hợp khác miễn là chúng chỉ định từ khóa DISTINCT. Nguồn: [link] (http://dev.mysql.com/doc/refman/5.7/en/group-by-optimization.html) – JavoSN
bạn đã sử dụng những gì? –