我有一张包含图表数据的表格。
例如
index value
0 3
1 5
2 7
3 6
4 8
5 9
6 12
7 11
8 10
9 14
10 13
我需要一个查询返回值为局部最大值的结果,即特定索引处的值大于index + 1和index-1处的值。
因此对于示例集,它应该返回索引列表:2,6,9对应于值7,12,14。
我正在使用PHP和SQLite。 我可以在php中使用foreach-loop来完成它,但是想知道是否有一种简单的方法可以使用SQL命令来完成它。
任何意见都会受到赞赏。
答案 0 :(得分:1)
或使用子查询(经过测试):
select ind
from tmp1 t1
where val > (select val from jdoyle.tmp1 t2 where t2.ind = t1.ind-1)
and val > (select val from jdoyle.tmp1 t2 where t2.ind = t1.ind+1);
答案 1 :(得分:0)
在PHP中使用单个循环执行此操作可能比将其添加到SQL查询中要快得多,但如果您真的想要,可以使用以下内容自行加入表:
SELECT b.index
FROM points AS a, points AS b, points AS c
WHERE a.index = b.index-1 AND c.index = b.index+1
AND a.value < b.value AND c.value < b.value
(未经测试,所以*交叉手指*。)
答案 2 :(得分:0)
如果SQL数据库支持存储过程,则可以在SQL中的存储过程中编写循环。但是,我不认为sqlite有足够的存储过程来做这样的事情,你需要使用mysql,postgresql或类似的东西。
答案 3 :(得分:0)
好吧,如果你在制作中使用sqlite,我想你没有大量的数据。考虑到这一点,最好的解决方案就是在php级别解决它。