如何进行依赖于其他行的SQL查询?

时间:2016-09-10 19:43:59

标签: sql

[免责声明:我很难表达我的问题;欢迎所有人帮助]

在我对SQL的理解中,关系主要集中在检索行。我经常遇到以下问题:

如何有效地获取val2=V行后跟id val1 val2 0 A Z 1 B V 2 C Z 3 D B 行的所有情况?换句话说:我如何表达可以查看以下行的查询,以查看是否存在我感兴趣的行序列

Z B

## Update

基于(有用的)答案,我应该清楚另外一件事:我可以看到的序列是灵活的(它也可能是Temp),它的长度也可以变化。

2 个答案:

答案 0 :(得分:2)

ANSI标准具有lead()lag()功能。如果您想在结果集中同时使用两行,请执行以下操作:

select t.*
from (select t.*, 
             lag(val2) over (order by id) as prev_val2,
             lead(val2) over (order by id) as next_val2
      from t
     ) t
where (val2 = 'Z' and next_val2 = 'V') or
      (prev_val2 = 'Z' and next_val2 = 'Z');

注意:我正在根据id解释“后面跟着一行”作为下一行。在处理ZVV,ZZV等数据时,任何替代解释都会变得模棱两可。

答案 1 :(得分:-2)

我不认为你只能用SQL做到这一点。

我的解决方案是使用能够连接到SQL数据库(PHP,C,...)的任何语言从数据库中获取值,然后使用该语言进行任何所需的测试。

相关问题