我有一个表,其中包含来自图表的数据。
例如
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和索引-1处的值。
因此,对于示例集,它应该返回索引列表: 2、6、9,对应于值7、12、14。
我正在使用PHP和SQLite。我可以在php中使用foreach-loop来做这件事,但我想知道是否有一种简单的方法可以只使用SQL命令来做这件事。
任何意见都将不胜感激。
发布于 2009-07-23 02:39:32
使用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 (未经测试,所以*祈祷*。)
发布于 2009-07-23 02:44:47
或者使用子查询(这是经过测试的):
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);发布于 2009-07-23 02:40:26
如果您的SQL数据库支持存储过程,则可以使用SQL在存储过程中编写循环。然而,我不认为sqlite有足够丰富的存储过程来做这样的事情,你需要使用mysql,postgresql或类似的。
https://stackoverflow.com/questions/1169280
复制相似问题