例如,如果我有一个在柜台上完成的交易的数据库表。我想搜索是否有任何时间被定义为非常繁忙(在10分钟内处理超过10次交易)。我该怎么去查询呢?我可以根据时间范围汇总并计算这些范围内的交易ID数量吗?
添加示例以阐明我的输入和所需的输出:
+----+--------------------+
| Id | register_timestamp |
+----+--------------------+
| 25 | 08:10:50 |
| 26 | 09:07:36 |
| 27 | 09:08:06 |
| 28 | 09:08:35 |
| 29 | 09:12:08 |
| 30 | 09:12:18 |
| 31 | 09:12:44 |
| 32 | 09:15:29 |
| 33 | 09:15:47 |
| 34 | 09:18:13 |
| 35 | 09:18:42 |
| 36 | 09:20:33 |
| 37 | 09:20:36 |
| 38 | 09:21:04 |
| 39 | 09:21:53 |
| 40 | 09:22:23 |
| 41 | 09:22:42 |
| 42 | 09:22:51 |
| 43 | 09:28:14 |
+----+--------------------+
所需的输出类似于:
+-------+----------+
| Count | Min |
+-------+----------+
| 1 | 08:10:50 |
| 3 | 09:07:36 |
| 7 | 09:12:08 |
| 8 | 09:20:33 |
+-------+----------+
答案 0 :(得分:1)
这个怎么样:
SELECT time,
FROM (
SELECT count(*) AS c, min(time) AS time
FROM transactions
GROUP BY floor(extract(epoch from time)/600);
)
WHERE c > 10;
这将找到在该时间间隔内发生超过10次交易的所有十分钟间隔。它假定该表名为transactions
,并且它有一个名为time
的列,其中存储了时间戳。
答案 1 :(得分:0)
感谢redneb,我最终得到了以下查询:
SELECT count(*) AS c, min(register_timestamp) AS register_timestamp
FROM trak_participants_data
GROUP BY floor(extract(epoch from register_timestamp)/600)
order by register_timestamp
它足够接近让我能够分辨出哪个时间块是计数器中最繁忙的。