2016-10-10 56 views
1

我的数据是这样的:选择仅当超过X OCCURENCES

Client Number | Order Date | Order Amount | Sequence (created with Row_Number()) 

我创建了一个序列与ROW_NUMBER(),这样我就可以看到一个客户有多少订单了。

如果我使用WHERE序列> 3,我会在3之前丢失订单。我不能使用HAVING,因为我需要查看每个订单。我如何选择3个以上订单的客户号码?

我想看看:

Client Number | Order Date | Order Amount | Sequence 
1111    Jan 01  100    1 
1111    Jan 02  100    2 
1111    Jan 03  100    3 
1112    Jan 01  100    1 
1112    ...   ...    ... 
1112    Jan 20  100    20 

因此,只有那些具有序列大于3,同时仍保持符合序列1和2

回答

0
create table #test(clientnumber int, orderdate datetime, orderamount int) 

insert into #test values 
(1110, '01/01/2016', 100), 
(1110, '01/02/2016', 100), 
(1111, '01/01/2016', 100), 
(1111, '01/02/2016', 100), 
(1111, '01/03/2016', 100), 
(1112, '01/01/2016', 100), 
(1112, '01/02/2016', 100), 
(1112, '01/03/2016', 100), 
(1112, '01/04/2016', 100); 

with cte as(
select clientnumber, orderdate, orderamount, 
count(*) over(partition by clientnumber) as ran 
from #test) 
select * from cte 
where ran >= 3 
+0

嗯,这很容易。 .. 非常感谢你! – user107242

2
SELECT * 
    FROM data 
WHERE ClientNumber IN 
(
    SELECT ClientNumber 
    FROM data 
    GROUP BY ClientNumber 
    HAVING COUNT(1) >= 3 
);