我有一个这样的表:
| 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
分组,然后找到最大值。
关于mysql - 如何编写 SQL 查询以获取行中最长的大于零值的序列数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47915046/