Sql server 跳过行数()为X且相应项为';Y';
我有一个表,其中的行_NUMBER()在用户上分区: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
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')
请注意,要使其正常工作,您确实需要一个可用于对记录进行排序的列—我假定为columnid
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')