sql 统计出5秒内记录个数超过5个的值

发布于 2022-09-13 01:22:46 字数 866 浏览 44 评论 0

比如有下个这样一个记录表
ID 是自增的,item_id 是关联外键,tiem 是记录的时间(单位秒,假设从1秒开始)

IDitem_IDtime
111
222
322
423
523
614
717
817
918
1028
1118
1219
13211

我想统计出5秒内记录个数超过5个的 item_id ,比如上表的查询结果应该是

item_ID
1

因为从第4秒开始的5秒内有6个 item_id = 1 的记录,请问下 sql 的语句应该怎么写?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

初与友歌 2022-09-20 01:22:46

https://tableconvert.com/
http://mysql.jsrun.net/

CREATE DATABASE test;
use test;
CREATE TABLE tableName
(
     ID     varchar(300),
     item_ID     varchar(300),
     time     varchar(255)
);

INSERT INTO tableName ( ID , item_ID , time )
VALUES
    ('1', '1', '1'),
    ('2', '2', '2'),
    ('3', '2', '2'),
    ('4', '2', '3'),
    ('5', '2', '3'),
    ('6', '1', '4'),
    ('7', '1', '7'),
    ('8', '1', '7'),
    ('9', '1', '8'),
    ('10', '2', '8'),
    ('11', '1', '8'),
    ('12', '1', '9'),
    ('13', '2', '11');
SELECT DISTINCT c.item_ID
FROM 
    (SELECT 
        (SELECT b.item_ID
        FROM tableName b
        WHERE b.item_ID = a.item_ID
                AND b.time
            BETWEEN a.time
                AND (a.time + 5)
        GROUP BY  b.item_ID
        HAVING count(b.item_ID) >5 ) item_ID
        FROM tableName a
        ORDER BY  a.time) c
    WHERE c.item_ID is NOT null;

image.png

菊凝晚露 2022-09-20 01:22:46

你这个5s很多玩法,如果固定是从1-5,6-10这种,查询很好做,首先第一次按照时间计算在第几个5s,然后外面套一层做分组就行了;
就怕他是随机分布的5s ,比如数据集中出现在9s一次,11s5次,5s内连续出现6次,此时你别说用sql了,用代码处理都要考虑考虑

自由范儿 2022-09-20 01:22:46
SELECT T.ITEM_ID
  FROM (SELECT ITEM_ID, TIME FROM TEST) T,
       (SELECT DISTINCT ITEM_ID, TIME AS BEGIN_TIME, TIME+5 AS END_TIME
          FROM TEST) S
 WHERE T.TIME >= S.BEGIN_TIME
   AND T.TIME <= S.END_TIME
   AND T.ITEM_ID = S.ITEM_ID
 GROUP BY BEGIN_TIME, END_TIME, T.ITEM_ID
HAVING COUNT(*)>5;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文