[免责声明:我很难表达我的问题;欢迎所有人帮助]
在我对SQL的理解中,关系主要集中在检索行。我经常遇到以下问题:
如何有效地获取val2=V
行后跟id val1 val2
0 A Z
1 B V
2 C Z
3 D B
行的所有情况?换句话说:我如何表达可以查看以下行的查询,以查看是否存在我感兴趣的行序列。
Z B
## Update
基于(有用的)答案,我应该清楚另外一件事:我可以看到的序列是灵活的(它也可能是Temp
),它的长度也可以变化。
答案 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,...)的任何语言从数据库中获取值,然后使用该语言进行任何所需的测试。