Meine Anforderung ist, die neueste Bestellung jedes Kunden zu erhalten und dann die Top 100-Datensätze zu erhalten.
Ich habe eine Abfrage wie folgt geschrieben, um die neuesten Bestellungen für jeden Kunden zu erhalten. Interne Abfrage funktioniert gut. Aber ich weiß nicht, wie ich die ersten 100 basierend auf den Ergebnissen bekomme.
SELECT * FROM (
SELECT id, client_id, ROW_NUMBER() OVER(PARTITION BY client_id ORDER BY create_time DESC) rn
FROM order
) WHERE rn=1
Irgendwelche Ideen? Vielen Dank.
Angenommen, create_time enthält die Zeit, zu der die Bestellung erstellt wurde, und Sie möchten die 100 Kunden mit den neuesten Bestellungen.
create_time desc
ROWNUM
filtert.Abfrage:
SELECT * FROM (
SELECT * FROM (
SELECT
id,
client_id,
create_time,
ROW_NUMBER() OVER(PARTITION BY client_id ORDER BY create_time DESC) rn
FROM order
)
WHERE rn=1
ORDER BY create_time desc
) WHERE rownum <= 100
UPDATE für Oracle 12c
Mit Version 12.1 führte Oracle "echte" Top-N-Abfragen ein. Mit der neuen FETCH FIRST...
-Syntax können Sie auch Folgendes verwenden:
SELECT * FROM (
SELECT
id,
client_id,
create_time,
ROW_NUMBER() OVER(PARTITION BY client_id ORDER BY create_time DESC) rn
FROM order
)
WHERE rn = 1
ORDER BY create_time desc
FETCH FIRST 100 ROWS ONLY)
sie sollten Rownum in Oracle verwenden, um das zu tun, wonach Sie suchen
where rownum <= 100
sehen Sie auch diese Antworten, um Ihnen zu helfen
Wie Moneer Kamal sagte, können Sie das einfach tun:
SELECT id, client_id FROM order
WHERE rownum <= 100
ORDER BY create_time DESC;
Beachten Sie, dass die Bestellung abgeschlossen ist nach Erhalten der 100-Zeile. Dies kann nützlich sein, wenn Sie nicht bestellen möchten.
Erste 10 Kunden in db (Tischkunden) eingefügt:
select * from customers where customer_id <=
(select min(customer_id)+10 from customers)
Last 10 customers inserted into db (table customers):
select * from customers where customer_id >=
(select max(customer_id)-10 from customers)
Hoffe das hilft....