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
Susan Sarandonoriginal
2025-01-21 15:36:10892parcourir

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>

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>

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>

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>

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>
  • 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>

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:
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