Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何找到具有连续值的用户_Sql_Sql Server - Fatal编程技术网

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