Maison > base de données > tutoriel mysql > Comment récupérer la dernière valeur de chaque groupe en fonction de l'horodatage dans Oracle ?

Comment récupérer la dernière valeur de chaque groupe en fonction de l'horodatage dans Oracle ?

Susan Sarandon
Libérer: 2025-01-21 15:36:10
original
888 Les gens l'ont consulté

How to Retrieve the Latest Value for Each Group Based on Timestamp in Oracle?

Récupérer la dernière valeur de chaque groupe en fonction du temps

Question :

Considérez la table Oracle suivante :

<code>id     date              quantity
1      2010-01-04 11:00  152
2      2010-01-04 11:00  210
1      2010-01-04 10:45  132
2      2010-01-04 10:45  318
4      2010-01-04 10:45  122
1      2010-01-04 10:30  1
3      2010-01-04 10:30  214
2      2010-01-04 10:30  5515
4      2010-01-04 10:30  210</code>
Copier après la connexion

Le but est de récupérer la dernière valeur (et son horodatage) par groupe d'identifiants. Le résultat attendu devrait être :

<code>id     date              quantity
1      2010-01-04 11:00  152
2      2010-01-04 11:00  210
3      2010-01-04 10:30  214
4      2010-01-04 10:45  122</code>
Copier après la connexion

Solution :

Pour ce faire, créez une vue en ligne qui classe chaque ligne du groupe d'identifiants en fonction de l'horodatage décroissant :

<code class="language-sql">SELECT RANK() OVER (PARTITION BY id ORDER BY ts DESC) AS rnk,
       id, ts, qty
FROM qtys</code>
Copier après la connexion

Filtrez ensuite l'enregistrement de rang 1 pour obtenir la dernière valeur :

<code class="language-sql">SELECT x.id, x.ts AS "DATE", x.qty AS "QUANTITY"
FROM (SELECT * FROM qtys) x
WHERE x.rnk = 1</code>
Copier après la connexion

Options avancées :

  • Filtrer par heure : Pour récupérer uniquement les valeurs des XX dernières minutes, ajoutez la condition suivante à la clause WHERE :
<code class="language-sql">WHERE x.ts >= sysdate - INTERVAL 'XX' MINUTE</code>
Copier après la connexion
  • Joindre l'identifiant avec les données d'une autre table : Si la colonne idname existe dans une autre table, joignez ces tables pour joindre les valeurs :
<code class="language-sql">SELECT x.id || '-' || y.idname AS "ID",
       x.ts AS "DATE", x.qty AS "QUANTITY"
FROM (SELECT * FROM qtys) x
LEFT JOIN another_table y ON x.id = y.id</code>
Copier après la connexion

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