Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.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 server 跳过行数()为X且相应项为';Y';_Sql Server_Database_Tsql - Fatal编程技术网

Sql server 跳过行数()为X且相应项为';Y';

Sql server 跳过行数()为X且相应项为';Y';,sql-server,database,tsql,Sql Server,Database,Tsql,我有一个表,其中的行_NUMBER()在用户上分区: Row|Activity|User ----------------- 1 |A |Jeff 2 |A |Jeff 3 |A |Jeff 1 |A |Bob 2 |B |Bob 3 |C |Bob 1 |A |Sam 2 |B |Sam 3 |A |Sam 4 |D |Sam 在行计数期间,我想跳过Je

我有一个表,其中的行_NUMBER()在用户上分区:

Row|Activity|User
-----------------
1  |A       |Jeff
2  |A       |Jeff
3  |A       |Jeff
1  |A       |Bob
2  |B       |Bob
3  |C       |Bob
1  |A       |Sam
2  |B       |Sam
3  |A       |Sam
4  |D       |Sam
在行计数期间,我想跳过Jeff和Sam的条目3,因为如果用户的第三个活动是a,我应该跳过它。我将要跳过的行称为“限制行”。基本上,我想要这个表作为结果(没有明显的注释):

我的问题是:

SELECT ROW_NUMBER() OVER(PARTITION BY User) AS Row, Activity, User FROM Table1
WHERE [Filters]
AND User IN(SELECT User IN Table1
            WHERE [Filters] --Same filters as above
            GROUP BY User HAVING COUNT(User) > 1) --Let's call this the 'Minimum 1 Activity Filter'
我将非常诚实,现在,我不知道最小1活动过滤器是否会在以后导致问题,也就是说,如果第2行也有限制。正因为如此,我更愿意站在安全的一边,想象一下,一旦所有受限制的行都处理好了,我就必须检查最小1个活动过滤器

如果用户的第三个活动是,我应该跳过它

考虑:

select 
    row_number() over(partition by user order by id) rn,
    activity,
    user
from (
    select 
        t.*,
        row_number() over(partiton by user order id) rn
    from mytable t
) t
where not (rn = 3 and activity = 'A')
请注意,要使其正常工作,您确实需要一个可用于对记录进行排序的列—我假定为column
id

select 
    row_number() over(partition by user order by id) rn,
    activity,
    user
from (
    select 
        t.*,
        row_number() over(partiton by user order id) rn
    from mytable t
) t
where not (rn = 3 and activity = 'A')