
有个表有创建时间字段,按照这个字段,每隔 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 试了一下,使用 `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 只负责查 不负责逻辑的 |