我有以下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 |
+-----------------------+----------+
是否有任何解决方案可以“正确”对我的结果进行排序(如示例中所示)?
答案 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;