Récupération de la valeur maximale pour chaque ID utilisateur unique dans Oracle
Ce guide montre comment extraire efficacement la valeur maximale associée à chaque ID utilisateur distinct d'une table Oracle. Supposons un tableau structuré comme suit:
<code>UserId, Value, Date</code>
L'objectif est de récupérer le UserId
et son Value
correspondant où le Date
est le plus récent pour chaque utilisateur.
Voici une requête Oracle SQL efficace pour y parvenir:
<code class="language-sql">SELECT t1.* FROM mytable t1 LEFT OUTER JOIN mytable t2 ON (t1.UserId = t2.UserId AND t1."Date" < t2."Date") WHERE t2.UserId IS NULL;</code>
Cette requête utilise un LEFT OUTER JOIN
pour comparer chaque ligne dans mytable
(aliasé comme t1
) avec toutes les autres lignes (aliasées comme t2
) ayant le même UserId
. La condition de jointure t1."Date" < t2."Date"
garantit que seules les lignes avec une date ultérieure sont considérées.
La clause WHERE t2.UserId IS NULL
filtre les résultats. Lignes où t2.UserId
est NULL
indique qu'aucune autre ligne avec le même UserId
et un plus tard Date
n'existe. Par conséquent, ces lignes représentent la date maximale pour chaque utilisateur.
Exemple:
si mytable
contient les données suivantes:
UserId | Value | Date |
---|---|---|
1 | 5 | 2023-03-08 |
1 | 10 | 2023-03-15 |
2 | 3 | 2023-04-01 |
2 | 7 | 2023-04-10 |
La requête reviendra:
UserId | Value | Date |
---|---|---|
1 | 10 | 2023-03-15 |
2 | 7 | 2023-04-10 |
Cette approche est efficace et évite le besoin de sous-questionnaires ou de fonctions de fenêtre, ce qui en fait une solution robuste pour les bases de données Oracle.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!