首页 > 数据库 > mysql教程 > 如何在 Oracle SQL 中检索每个 ID 和时间戳的最新数量?

如何在 Oracle SQL 中检索每个 ID 和时间戳的最新数量?

Mary-Kate Olsen
发布: 2025-01-21 15:42:09
原创
240 人浏览过

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
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板