Heim > Datenbank > MySQL-Tutorial > Wie rufe ich die neueste Menge pro ID und Zeitstempel in Oracle SQL ab?

Wie rufe ich die neueste Menge pro ID und Zeitstempel in Oracle SQL ab?

Mary-Kate Olsen
Freigeben: 2025-01-21 15:42:09
Original
292 Leute haben es durchsucht

How to Retrieve the Latest Quantity per ID and Timestamp in Oracle SQL?

Oracle SQL: Extrahieren der neuesten Menge für jede ID

Diese Anleitung zeigt, wie Sie die neueste Menge für jede eindeutige ID effizient aus einer Tabelle mit zeitgestempelten Daten in Oracle SQL abrufen können.

Der Kernansatz beinhaltet eine verschachtelte Abfragestrategie:

<code class="language-sql">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;</code>
Nach dem Login kopieren

Diese Abfrage funktioniert wie folgt:

  1. Innere Abfrage (ranked_data): Diese Unterabfrage verwendet die Fensterfunktion RANK(), um jeder Zeile innerhalb jeder id-Gruppe einen Rang zuzuweisen, sortiert nach Zeitstempel (ts) in absteigender Reihenfolge . Der neueste Datensatz für jeden id erhält den Rang 1.

  2. Äußere Abfrage: Diese Abfrage filtert die Ergebnisse der inneren Abfrage und wählt nur die Zeilen mit rnk = 1 (die neuesten Datensätze) aus. Anschließend werden die Ergebnisse nach id gruppiert und mit MAX() der entsprechende Zeitstempel und die entsprechende Menge abgerufen. Beachten Sie, dass die Verwendung von MAX(quantity) mit GROUP BY id angemessen ist, vorausgesetzt, dass der neueste Zeitstempel auch die neueste Menge impliziert; Wenn es mehrere Zeilen mit demselben letzten Zeitstempel, aber unterschiedlichen Mengen geben könnte, ist möglicherweise eine andere Aggregationsmethode erforderlich (wie FIRST_VALUE in einer komplexeren Abfrage).

Verbesserungen:

1. Zeitbasierte Filterung: Um die Ergebnisse auf ein bestimmtes Zeitfenster (z. B. die letzten XX Minuten) zu beschränken, fügen Sie der inneren Abfrage eine WHERE-Klausel hinzu:

<code class="language-sql">WHERE ts >= SYSTIMESTAMP - INTERVAL 'XX' MINUTE</code>
Nach dem Login kopieren

2. Mit einer anderen Tabelle verknüpfen: Um Daten aus einer anderen Tabelle einzubeziehen (z. B. ein id_table mit zusätzlichen ID-Informationen), verwenden Sie ein JOIN in der äußeren Abfrage:

<code class="language-sql">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;</code>
Nach dem Login kopieren

Denken Sie daran, your_table_name und id_table durch Ihre tatsächlichen Tabellennamen zu ersetzen. Dieser verfeinerte Ansatz bietet eine robuste und flexible Lösung zum Abrufen der neuesten Mengendaten in Oracle SQL.

Das obige ist der detaillierte Inhalt vonWie rufe ich die neueste Menge pro ID und Zeitstempel in Oracle SQL ab?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage