有个表有创建时间字段,按照这个字段,每隔 5 秒统计一次这期间的数据增量,如果没有新增,则为 0,这种 SQL 怎么写呢?
1
myd 2021-09-22 14:08:03 +08:00
select count(*) from xxx group by floor(时间戳 /5)
|
2
Geekerstar OP @myd
2021-09-22 13:45:29 1 2021-09-22 13:45:30 2 2021-09-22 13:46:00 4 2021-09-22 13:46:07 1 2021-09-22 13:46:30 2 不是每秒钟都有数据,有没有办法能整齐的每五秒分割一次来进行统计呢? |
3
myd 2021-09-22 14:28:43 +08:00
@Geekerstar 在程序中补齐,不一定要在数据库中实现。
|
4
deltadawn 2021-09-22 14:35:54 +08:00
INTERVAL()
|
5
Pipecraft 2021-09-22 15:46:50 +08:00 2
试了一下,使用 `DATE_ADD(created_at, INTERVAL - SECOND(created_at) % 5 SECOND)` 可以按照每分钟的 0,5,10.. 秒为单位统计。没有数据的时间段需要在程序补齐。
由于无法贴出代码,我把完整的 SQL 贴在了这里 pzwd.net/d/31/2 。 |
6
wellsc 2021-09-22 15:53:36 +08:00
用 Prometheus 吧
|
7
adgad2 2021-09-22 16:01:33 +08:00
遇到个类似需求,最后建表写个定时任务完事
|
8
haochen2 2021-09-22 16:10:58 +08:00
这种统计的还是多余建个表来存储吧
|
9
Geekerstar OP @Pipecraft 感谢大佬
|
10
Geekerstar OP @myd 嗯嗯,在程序中处理了
|
11
Geekerstar OP @Pipecraft 大佬的网站很棒,收藏了
|
12
beginor 2021-09-22 16:40:18 +08:00 via Android
不知道 mysql 有没有类似 PostgreSQL 生成序列的概念,有的话就很容易统计了
|
13
Saxton 2021-09-23 09:12:59 +08:00
我做过这个需求,先 count 查出来,然后用程序补充时间就可以了 mysql 只负责查 不负责逻辑的
|