首頁 >資料庫 >mysql教程 >如何在 Oracle SQL 中檢索每個 ID 的最新數量?

如何在 Oracle SQL 中檢索每個 ID 的最新數量?

Patricia Arquette
Patricia Arquette原創
2025-01-21 15:26:12824瀏覽

How to Retrieve the Latest Quantity for Each ID in Oracle SQL?

Oracle SQL:提取每個 ID 的最新數量

本指南示範如何有效率地檢索 Oracle SQL 資料庫中每個唯一 ID 的最新數量。 假設您有一個名為「qtys」的表,其結構如下:

  • ID:每筆記錄的唯一識別碼。
  • TS:表示記錄數量的時間戳記。
  • QTY:數量值。

目標是取得每個不同QTY的最新數量(TS)及其對應的時間戳記(ID)。

解:

以下查詢利用 MAX() 函數和 GROUP BY 子句來實現此目的:

<code class="language-sql">SELECT
    id,
    MAX(TS) AS "Latest Timestamp",
    MAX(QTY) KEEP (DENSE_RANK LAST ORDER BY TS) AS "Latest Quantity"
FROM
    qtys
GROUP BY
    id;</code>

此查詢按 ID 將資料分組,然後為每個群組選擇最大時間戳記 (MAX(TS))。 至關重要的是,MAX(QTY) KEEP (DENSE_RANK LAST ORDER BY TS) 確保檢索到與 最新 時間戳關聯的數量,即使多個條目共享相同的最大時間戳。

替代方法:

1。 過去 X 分鐘內的過濾:

要將結果限制為最近 X 分鐘內的條目,請合併 WHERE 子句:

<code class="language-sql">SELECT
    id,
    MAX(TS) AS "Latest Timestamp",
    MAX(QTY) KEEP (DENSE_RANK LAST ORDER BY TS) AS "Latest Quantity"
FROM
    qtys
WHERE
    TS > SYSTIMESTAMP - INTERVAL '30' MINUTE
GROUP BY
    id;</code>

'30' MINUTE 替換為您想要的時間間隔。

2。 與另一張桌子連接:

如果您需要合併另一個表格的資料(例如,「名稱」與欄位 idname),請使用 JOIN:

<code class="language-sql">SELECT
    t1.id || '-' || t2.idname AS "ID-IDNAME",
    MAX(t1.TS) AS "Latest Timestamp",
    MAX(t1.QTY) KEEP (DENSE_RANK LAST ORDER BY t1.TS) AS "Latest Quantity"
FROM
    qtys t1
JOIN
    names t2 ON t1.id = t2.id
GROUP BY
    t1.id || '-' || t2.idname;</code>

這會根據 id 列連接“qtys”和“names”,並連接 IDidname 作為組合標識符。 然後 MAX() 函數對連接的資料進行操作。 請記住調整表格和列名稱以符合您的特定資料庫架構。

以上是如何在 Oracle SQL 中檢索每個 ID 的最新數量?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn