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”,並連接 ID
和 idname
作為組合標識符。 然後 MAX()
函數對連接的資料進行操作。 請記住調整表格和列名稱以符合您的特定資料庫架構。
以上是如何在 Oracle SQL 中檢索每個 ID 的最新數量?的詳細內容。更多資訊請關注PHP中文網其他相關文章!