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:
<code class="language-sql">WHERE x.ts >= sysdate - INTERVAL 'XX' MINUTE</code>
<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!