Oracle SQL : Extraire la quantité la plus récente pour chaque ID
Ce guide montre comment récupérer efficacement la dernière quantité pour chaque ID unique dans une base de données Oracle SQL. Supposons que vous ayez une table appelée « qtys » avec la structure suivante :
ID
: Identifiant unique pour chaque enregistrement.TS
: Horodatage indiquant quand la quantité a été enregistrée.QTY
: La valeur de la quantité.Le but est d'obtenir la quantité la plus récente (QTY
) et son horodatage correspondant (TS
) pour chaque ID
distinct.
Solution :
La requête suivante utilise la fonction MAX()
et la clause GROUP BY
pour y parvenir :
<code class="language-sql">SELECT id, MAX(TS) AS "Latest Timestamp", MAX(QTY) KEEP (DENSE_RANK LAST ORDER BY TS) AS "Latest Quantity" FROM qtys GROUP BY id;</code>
Cette requête regroupe les données par ID
puis, pour chaque groupe, sélectionne l'horodatage maximum (MAX(TS)
). Surtout, MAX(QTY) KEEP (DENSE_RANK LAST ORDER BY TS)
garantit que la quantité associée au dernier horodatage est récupérée, même si plusieurs entrées partagent le même horodatage maximum.
Approches alternatives :
1. Filtrage au cours des X dernières minutes :
Pour limiter les résultats aux entrées des X dernières minutes, intégrez une clause WHERE
:
<code class="language-sql">SELECT id, MAX(TS) AS "Latest Timestamp", MAX(QTY) KEEP (DENSE_RANK LAST ORDER BY TS) AS "Latest Quantity" FROM qtys WHERE TS > SYSTIMESTAMP - INTERVAL '30' MINUTE GROUP BY id;</code>
Remplacez '30' MINUTE
par l'intervalle de temps souhaité.
2. Rejoindre une autre table :
Si vous devez incorporer des données d'une autre table (par exemple, "noms" avec une colonne idname
), utilisez un JOIN
:
<code class="language-sql">SELECT t1.id || '-' || t2.idname AS "ID-IDNAME", MAX(t1.TS) AS "Latest Timestamp", MAX(t1.QTY) KEEP (DENSE_RANK LAST ORDER BY t1.TS) AS "Latest Quantity" FROM qtys t1 JOIN names t2 ON t1.id = t2.id GROUP BY t1.id || '-' || t2.idname;</code>
Ceci rejoint "qtys" et "names" en fonction de la colonne id
et concatène les ID
et idname
pour un identifiant combiné. Les fonctions MAX()
opèrent alors sur les données jointes. N'oubliez pas d'ajuster les noms des tables et des colonnes pour qu'ils correspondent à votre schéma de base de données spécifique.
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!