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

Comment récupérer la dernière quantité par ID et horodatage dans Oracle SQL ?

Mary-Kate Olsen
Libérer: 2025-01-21 15:42:09
original
317 Les gens l'ont consulté

How to Retrieve the Latest Quantity per ID and Timestamp 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 à partir d'une table contenant des données horodatées dans Oracle SQL.

L'approche de base implique une stratégie de requêtes imbriquées :

SELECT id, MAX(ts) AS "DATE", MAX(quantity) AS "QUANTITY"
FROM (
    SELECT id, ts, RANK() OVER (PARTITION BY id ORDER BY ts DESC) AS rnk, quantity
    FROM your_table_name
) ranked_data
WHERE rnk = 1
GROUP BY id;
Copier après la connexion

Cette requête fonctionne comme suit :

  1. Requête interne (ranked_data) : Cette sous-requête utilise la fonction de fenêtre RANK() pour attribuer un rang à chaque ligne de chaque id groupe, classé par horodatage (ts) par ordre décroissant . Le dernier enregistrement pour chaque id reçoit un rang de 1.

  2. Requête externe : Cette requête filtre les résultats de la requête interne, en sélectionnant uniquement les lignes avec rnk = 1 (les derniers enregistrements). Il regroupe ensuite les résultats par id et utilise MAX() pour récupérer l'horodatage et la quantité correspondants. Notez que l'utilisation de MAX(quantity) avec GROUP BY id est appropriée en supposant que le dernier horodatage implique également la dernière quantité ; s'il peut y avoir plusieurs lignes avec le même horodatage le plus récent mais des quantités différentes, une méthode d'agrégation différente pourrait être nécessaire (comme FIRST_VALUE dans une requête plus complexe).

Améliorations :

1. Filtrage basé sur le temps : Pour limiter les résultats à une fenêtre de temps spécifique (par exemple, les XX dernières minutes), ajoutez une clause WHERE à la requête interne :

WHERE ts >= SYSTIMESTAMP - INTERVAL 'XX' MINUTE
Copier après la connexion

2. Rejoindre une autre table : Pour incorporer des données d'une autre table (par exemple, un id_table avec des informations d'identification supplémentaires), utilisez un JOIN dans la requête externe :

SELECT id || '-' || idname AS "ID-IDNAME", MAX(ts) AS "DATE", MAX(quantity) AS "QUANTITY"
FROM (
    SELECT id, ts, RANK() OVER (PARTITION BY id ORDER BY ts DESC) AS rnk, quantity
    FROM your_table_name
) ranked_data
INNER JOIN id_table ON ranked_data.id = id_table.id
WHERE rnk = 1
GROUP BY id || '-' || idname;
Copier après la connexion

N'oubliez pas de remplacer your_table_name et id_table par les noms de vos tables réels. Cette approche raffinée fournit une solution robuste et flexible pour récupérer les données quantitatives les plus récentes dans Oracle SQL.

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!

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