搜索值列表的出现位置

时间:2015-12-28 23:47:15

标签: sql sql-server sql-server-2008 tsql

我试图找到一种优化的方法来识别列表中是否存在一组特定的值。

例如,我们假设表格中有以下记录列表

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。

1 个答案:

答案 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';