Sql 如何找到具有连续值的用户
我有一个查询,结果如下Sql 如何找到具有连续值的用户,sql,sql-server,Sql,Sql Server,我有一个查询,结果如下 ID Date result xxx3614 2017-02-01 n xxx3614 2017-02-06 n xxx4522 2017-02-06 n xxx5516 2017-02-02 n xxx5516 2017-02-04 n xxx5516 2017-02-06 n xxx9061 2017-02-02 n xxx9061 2017-02-04 n xxx906
ID Date result
xxx3614 2017-02-01 n
xxx3614 2017-02-06 n
xxx4522 2017-02-06 n
xxx5516 2017-02-02 n
xxx5516 2017-02-04 n
xxx5516 2017-02-06 n
xxx9061 2017-02-02 n
xxx9061 2017-02-04 n
xxx9061 2017-02-06 y
xxx9061 2017-02-06 n
我正在寻找的用户有一个n的结果连续3次。所以在上面的结果中,上面的查询应该只给我xxx5516用户
怎么做?最简单的方法是使用
lag()
或lead()
:
使用带范围参数的窗口函数检查过去的两个连续结果:
SELECT * from (
SELECT ID, date, result,
SUM(case when result = 'n' then 1 else 0 end))
OVER (PARTITION BY ID
ORDER BY date
ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) result_prev_sum
FROM table
) x
WHERE x.result_prev_sum = 3
如果只需要第三个连续结果,而不需要更多结果,请使用无界前置,而不是在前两行和当前行之间 从表中选择不同的id 其中计数(结果)=3
SELECT * from (
SELECT ID, date, result,
SUM(case when result = 'n' then 1 else 0 end))
OVER (PARTITION BY ID
ORDER BY date
ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) result_prev_sum
FROM table
) x
WHERE x.result_prev_sum = 3