如何编写SQL Query以获取行中长度大于零的最长系列的数量?

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

我有这样一张桌子:

|  id   | prize |
-----------------
|   1   |   8   |
|   2   |   2   |
|   3   |   5   |
|   4   |   0   |
|   5   |   0   |
|   6   |   2   |
|   7   |   0   |
|   8   |   1   |
|   9   |   4   |

在这里你可以看到最长的一系列正值是3(8,2,5)

我想得到这样的结果:

| result |
----------
|   3    |

我可以在php中检查这一点,但在一个SQL查询中执行此操作非常重要。

编辑:正面我的意思是大于零。

mysql sql
1个回答
3
投票

考虑这个解决方案

select max(t.sequenceCnt)
from
(
    select t.cnt, count(*) sequenceCnt
    from
    (
        select d1.id, count(d2.id) cnt
        from data d1
        left join data d2 on d1.id < d2.id and d2.price = 0
        where d1.price != 0
        group by d1.id
    ) t
    group by t.cnt
) t

dbfiddle demo

该解决方案的核心是最里面的子查询:

select d1.id, count(d2.id) cnt
from data d1
left join data d2 on d1.id < d2.id and d2.price = 0
where d1.price != 0
group by d1.id

连续非零价格有the same cnt值。一旦你有了这个,其余的很容易。你根据cnt分组,然后找到最大值。

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