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中文网其他相关文章!