使用sql(laravel / mysql)计算连续最大重复次数

问题描述 投票:-1回答:1

我的数据看起来像这样:

enter image description here

是否有可能使用id作为列顺序(ASC)来计算ROW中出现的最大值0是多少?因此预期结果将是连续3次为0;或者如果我们连续计算值1-2次。

在php中,我可以预知所有值并计数出现的次数,但我正在寻找解决方案以在数据库中做到这一点。

亲切的问候标记

mysql sql gaps-and-islands
1个回答
0
投票

您可以为此使用一些空缺的技巧,利用行号之间的差异来构建具有相同值的连续记录组。

如果id始终以1递增(没有间隔):

select sl, max(no_rec)
from (
    select t.*, count(*) over(partition by sl, id - rn) no_rec
    from (
        select t.*, row_number() over(partition by sl order by id) rn
        from mytable t
    ) t
) t
group by sl

否则,我们可以使用row_number()生成伪造的自动递增的ID:

select sl, max(no_rec)
from (
    select t.*, count(*) over(partition by sl, rn1 - rn2) no_rec
    from (
        select
            t.*,
            row_number() over(order by id) rn
            row_number() over(partition by sl order by id) rn
        from mytable t
    ) t
) t
group by sl

注意:这使用了需要MySQL 8.0的窗口函数。在早期版本中,此类问题要解决得多。

© www.soinside.com 2019 - 2024. All rights reserved.