Maison > base de données > tutoriel mysql > Comment récupérer la dernière quantité pour chaque ID dans Oracle SQL ?

Comment récupérer la dernière quantité pour chaque ID dans Oracle SQL ?

Patricia Arquette
Libérer: 2025-01-21 15:26:12
original
823 Les gens l'ont consulté

How to Retrieve the Latest Quantity for Each ID in Oracle SQL?

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal