说我有一个像这样的桌子
id timestamp
-------------------------------------
1 2019-06-15 17:00:00
2 2019-06-15 17:01:12
3 2019-06-15 17:02:54
4 2019-06-15 17:06:23
5 2019-06-15 17:10:59
...等等,适用于许多行。
我想编写一个查询,以查找在一定时间范围内(例如一小时)的ID(行)数。我知道我可以这样做以在两个时间戳记中找到计数:
SELECT COUNT(id)
FROM table
WHERE (timestamp
BETWEEN TIMESTAMP '2019-06-15 17:00:00'
AND TIMESTAMP '2019-06-15 18:00:00')
但是,这很麻烦,因为我必须为每个连续的时间戳范围运行此查询。有没有一种方法可以编写查询,让我每小时获得ID的数量(17-18、18-19、19-20等),并按范围对它们进行分组?我还需要它连续工作几天。
答案 0 :(得分:0)
您可以使用派生表列出所需的小时数,然后使用JOIN
:
SELECT h.hh, COUNT(t.timestamp)
FROM (SELECT '2019-06-15 17:00:00' as hh UNION ALL
SELECT '2019-06-15 18:00:00' as hh UNION ALL
SELECT '2019-06-15 19:00:00' as hh UNION ALL
SELECT '2019-06-15 20:00:00' as hh
) h LEFT JOIN
t
ON t.timestamp >= h.hh AND t.timestamp < h.hh + INTERVAL 1 HOUR
GROUP BY h.hh
答案 1 :(得分:0)
您可以使用date()
提取日期,并使用hour()
提取小时和小时数。
SELECT date(timestamp),
hour(timestamp),
count(id)
FROM elbat
GROUP BY date(timestamp),
hour(timestamp);