Mon exigence est d’obtenir la dernière commande de chaque client, puis les 100 meilleurs enregistrements.
J'ai écrit une requête comme ci-dessous pour obtenir les dernières commandes pour chaque client. La requête interne fonctionne bien. Mais je ne sais pas comment obtenir les 100 premiers sur la base des résultats.
SELECT * FROM (
SELECT id, client_id, ROW_NUMBER() OVER(PARTITION BY client_id ORDER BY create_time DESC) rn
FROM order
) WHERE rn=1
Des idées? Merci.
En supposant que create_time contienne l'heure à laquelle la commande a été créée et que vous voulez les 100 clients avec les dernières commandes, vous pouvez:
create_time desc
ROWNUM
Question:
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 pour Oracle 12c
Avec la version 12.1, Oracle introduisit "vraies" requêtes Top-N . En utilisant la nouvelle syntaxe FETCH FIRST...
, vous pouvez également utiliser:
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)
vous devriez utiliser rownum dans Oracle pour faire ce que vous cherchez
where rownum <= 100
voir aussi ces réponses pour vous aider
10 premiers clients insérés dans la base de données (clients de la table):
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)
J'espère que cela t'aides....