首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL -查询帮助:查找本地最大值

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

Stack Overflow用户
提问于 2009-07-23 02:32:03
回答 4查看 1.7K关注 0票数 2

我有一个表,其中包含来自图表的数据。

例如

代码语言:javascript
复制
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命令来做这件事。

任何意见都将不胜感激。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-07-23 02:39:32

使用PHP中的单个循环来实现这一点可能比将其硬塞到SQL查询中要快得多,但是如果您真的想这样做,您可以使用如下内容自联接表本身:

代码语言:javascript
复制
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 

(未经测试,所以*祈祷*。)

票数 0
EN

Stack Overflow用户

发布于 2009-07-23 02:44:47

或者使用子查询(这是经过测试的):

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2009-07-23 02:40:26

如果您的SQL数据库支持存储过程,则可以使用SQL在存储过程中编写循环。然而,我不认为sqlite有足够丰富的存储过程来做这样的事情,你需要使用mysql,postgresql或类似的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1169280

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档