按日期时间排序并分组

时间:2021-03-15 14:53:25

标签: sql postgresql

我有以下sql:

SELECT 
  floor(extract(epoch from created_date)/3600)*3600 AS "time",
  count(*) as total
FROM event 
GROUP BY time
ORDER BY time

并得到以下结果:

+-----------------------+----------+
| time                  | total    |
+-----------------------+----------+
| 2021-03-14 16:00:00   |        2 | 
| 2021-03-14 17:00:00   |        5 | 
| 2021-03-15 06:00:00   |        2 | 
| 2021-03-15 07:00:00   |        1 | 
+-----------------------+----------+

但是我想获得由 time 排序的结果,例如:

+-----------------------+----------+
| time                  | total    |
+-----------------------+----------+
| 2021-03-15 07:00:00   |        1 | 
| 2021-03-15 06:00:00   |        2 | 
| 2021-03-14 17:00:00   |        5 | 
| 2021-03-14 16:00:00   |        2 | 
+-----------------------+----------+

我的尝试 我尝试添加 ORDER BY time DESC 子句但得到(零):

+-----------------------+----------+
| time                  | total    |
+-----------------------+----------+
| 2021-03-14 16:00:00   |        2 | 
| 2021-03-14 17:00:00   |        0 | 
| 2021-03-15 06:00:00   |        0 | 
| 2021-03-15 07:00:00   |        0 | 
+-----------------------+----------+

是否有任何解决方案可以“正确”对我的结果进行排序(如示例中所示)?

1 个答案:

答案 0 :(得分:1)

date_trunc() 这样做更简单时,您为什么要使用纪元算术?

SELECT DATE_TRUNC('hour', created_date) as time,
       count(*) as total
FROM event 
GROUP BY time
ORDER BY time;

注意:如果 time 中有 event 列,这可能是不明确的。你也可以重复这个表达式:

SELECT DATE_TRUNC('hour', created_date) as time,
       count(*) as total
FROM event 
GROUP BY DATE_TRUNC('hour', created_date)
ORDER BY time;