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

如何在 Oracle SQL 中檢索每個 ID 和時間戳記的最新數量?

Mary-Kate Olsen
發布: 2025-01-21 15:42:09
原創
239 人瀏覽過

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

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

本指南示範如何從 Oracle SQL 中包含時間戳記資料的表中有效率地檢索每個唯一 ID 的最新數量。

核心方法涉及巢狀查詢策略:

<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>
登入後複製

查詢的操作如下:

  1. 內部查詢 (ranked_data): 此子查詢使用 RANK() 視窗函數為每個 id 群組中的每一行指派排名,並按時間戳記 (ts) 降序排列。 每個 id 的最新記錄排名為 1。

  2. 外部查詢: 此查詢過濾內部查詢的結果,僅選擇帶有 rnk = 1 的行(最新記錄)。 然後,它按 id 對結果進行分組,並使用 MAX() 檢索相應的時間戳和數量。 請注意,假設最新時間戳也意味著最新數量,則將MAX(quantity)GROUP BY id 一起使用是合適的;如果可能有多行具有相同的最新時間戳但數量不同,則可能需要不同的聚合方法(例如更複雜的查詢中的FIRST_VALUE)。

增強功能:

1。基於時間的篩選: 若要將結果限制在特定時間視窗(例如,最後 XX 分鐘),請在內部查詢中新增 WHERE 子句:

<code class="language-sql">WHERE ts >= SYSTIMESTAMP - INTERVAL 'XX' MINUTE</code>
登入後複製

2。與另一個表格連接: 若要合併另一個資料表的資料(例如,附加 ID 資訊的 id_table),請在外部查詢中使用 JOIN

<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>
登入後複製

請記得將 your_table_nameid_table 替換為您的實際表名稱。 這種改進的方法為檢索 Oracle SQL 中的最新數量資料提供了強大且靈活的解決方案。

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板