【发布时间】:2015-11-13 16:02:50
【问题描述】:
假设我有几列,其中一列的日期时间如下:
2015-07-19 17:00:01
2015-07-19 17:15:01
2015-07-19 17:30:01
2015-07-19 17:45:01
2015-07-19 18:00:01
2015-07-19 18:15:01
2015-07-19 18:30:01
2015-07-19 18:45:01
2015-07-19 19:00:01
2015-07-19 19:15:01
2015-07-19 19:30:01
2015-07-19 19:45:01
2015-07-19 20:00:01
2015-07-19 20:15:01
我希望输出每 3 小时循环一次以进行汇总:
2015-07-19 17:00:01, max(column B), etc
2015-07-19 20:00:01, max(column B), etc
2015-07-19 23:00:01, max(column B), etc
2015-07-20 02:00:01, max(column B), etc
我的尝试:
SELECT
datetime_col,
min(col_b)
FROM table
where datetime_col >= STR_TO_DATE('2015-07-19 17:00:01','%Y-%m-%d %H:%i:%s')
GROUP BY
YEAR(datetime_col),
MONTH(datetime_col),
DAY(datetime_col),
ROUND(HOUR(datetime_col)/3);
实际输出:
2015-07-19 17:00:01
2015-07-19 20:00:01
2015-07-19 23:00:01
2015-07-20 00:00:01
2015-07-20 02:00:01
您可以看到,在开始新的一天之前,分组看起来不错。无论日、月、年等,我都需要以 3 小时为周期对其进行分组。
最好我想在单个查询中执行此操作,因为我在 C# 应用程序中调用它;
【问题讨论】:
-
GROUP BY floor(unix_timestamp(datetime_col)/(3*3600))怎么样?