我试图找到一种优化的方法来识别列表中是否存在一组特定的值。
例如,我们假设表格中有以下记录列表
Id Value
1 A
2 B
3 A
4 C
5 A
6 B
7 C
8 C
9 A
我试图找到一种方法来检查序列{A,B}或{A,B,C}出现的次数,例如。
我知道我可以用游标执行此操作,但我正在检查是否有其他选项在性能方面更优选。
我期望的结果会是这样的:
{A, B}: 2 times:
{A, B, C}: 1 time.
我正在使用Sql Server。
答案 0 :(得分:5)
最简单的方法可能是使用ANSI标准函数lag()
和/或lead()
:
select count(*)
from (select t.*,
lead(value) over (order by id) as next_value,
lead(value, 2) over (order by id) as next_value2,
from t
) t
where value = 'A' and next_value = 'B' and next_value2 = 'C';