Heim >Datenbank >MySQL-Tutorial >Wie kann ich den neuesten Wert für jede Gruppe basierend auf dem Zeitstempel in Oracle abrufen?

Wie kann ich den neuesten Wert für jede Gruppe basierend auf dem Zeitstempel in Oracle abrufen?

Susan Sarandon
Susan SarandonOriginal
2025-01-21 15:36:10892Durchsuche

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

Rufen Sie den neuesten Wert jeder Gruppe basierend auf der Zeit ab

Frage:

Betrachten Sie die folgende Oracle-Tabelle:

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

Das Ziel besteht darin, den neuesten Wert (und seinen Zeitstempel) nach ID-Gruppe abzurufen. Die erwartete Ausgabe sollte sein:

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

Lösung:

Erstellen Sie dazu eine Inline-Ansicht, die jede Zeile in der ID-Gruppe basierend auf dem absteigenden Zeitstempel einordnet:

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

Dann filtern Sie den Datensatz nach Rang 1, um den neuesten Wert zu erhalten:

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

Erweiterte Optionen:

  • Nach Zeit filtern: Um nur Werte innerhalb der letzten XX Minuten abzurufen, fügen Sie der WHERE-Klausel die folgende Bedingung hinzu:
<code class="language-sql">WHERE x.ts >= sysdate - INTERVAL 'XX' MINUTE</code>
  • ID mit Daten aus einer anderen Tabelle verbinden: Wenn die Spalte „idname“ in einer anderen Tabelle vorhanden ist, verknüpfen Sie diese Tabellen, um die Werte zu verbinden:
<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>

Das obige ist der detaillierte Inhalt vonWie kann ich den neuesten Wert für jede Gruppe basierend auf dem Zeitstempel in Oracle abrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn