SQL - 查询帮助:查找本地最大值

时间:2009-07-23 02:32:03

标签: php sql sqlite

我有一张包含图表数据的表格。

例如

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命令来完成它。

任何意见都会受到赞赏。

4 个答案:

答案 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级别解决它。