2016-10-10 2 views
1

Meine Daten so etwas wie diese:Wählen Sie nur, wenn mehr als X Vorkommnisse

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

Ich habe eine Sequenz mit Row_Number() erstellt, so kann ich sehen, wie viele Aufträge ein Client hat.

Wenn ich WHERE Sequence> 3 verwende, verliere ich die Bestellungen vor 3. Ich kann HAVING nicht benutzen, weil ich alle Bestellungen sehen muss. Wie kann ich die Kundennummern mit mehr als 3 Bestellungen auswählen?

würde Ich mag, um zu sehen: So nur diejenigen mit Sequenz über 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 

, während immer noch die Linie mit der Sequenz halten 1 und 2.

Antwort

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

Nun, das war einfach. .. Vielen Dank! – user107242

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