En supposant que create_time contient l'heure à laquelle la commande a été créée, et que vous voulez les 100 clients avec les dernières commandes, vous pouvez :
- ajoutez le create_time dans votre requête la plus profonde
- ordonnez les résultats de votre requête externe par
create_time desc
- ajouter une requête la plus externe qui filtre les 100 premières lignes à l'aide de
ROWNUM
Requête :
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
MISE À JOUR pour Oracle 12c
Avec la version 12.1, Oracle a introduit les "vraies" requêtes Top-N
. Utilisation du nouveau FETCH FIRST...
syntaxe, 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)