我有这样一张桌子:
| 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查询中执行此操作非常重要。
编辑:正面我的意思是大于零。
考虑这个解决方案
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
该解决方案的核心是最里面的子查询:
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
分组,然后找到最大值。