我的数据看起来像这样:
是否有可能使用id作为列顺序(ASC)来计算ROW中出现的最大值0是多少?因此预期结果将是连续3次为0;或者如果我们连续计算值1-2次。
在php中,我可以预知所有值并计数出现的次数,但我正在寻找解决方案以在数据库中做到这一点。
亲切的问候标记
您可以为此使用一些空缺的技巧,利用行号之间的差异来构建具有相同值的连续记录组。
如果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的窗口函数。在早期版本中,此类问题要解决得多。