首页 >数据库 >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