使用 Oracle 分析函数从使用 max 的列中获取数据而不是另一列

Posted

技术标签:

【中文标题】使用 Oracle 分析函数从使用 max 的列中获取数据而不是另一列【英文标题】:Fetch data from columns using max over another column using Oracle analytic functions 【发布时间】:2015-04-28 16:46:41 【问题描述】:

我需要使用 max(timestamp) 获取每个不同帐户 (acc) 的 bal 和 res 列之间的总和,看看这个:

  ID    ACC BAL RES TIMESTAMP
  --------------------------
  1 100 70  0   1430238709
  2 101 4   0   1430238710
  3 102 0   0   1430238720
  4 103 3   1   1430238721
  5 100 22  1   1430238731
  6 101 89  0   1430238732
  7 102 101 1   1430238742
  8 103 105 1   1430238753
  9 100 106 0   1430238763
 10 101 100 1   1430238774
 11 102 1   1   1430238784
 12 103 65  0   1430238795

我需要的是MAX(timestamp) <= 1430238763sum: bal + res 按 acc 分组,如下所示:

ACC TOT
-------
100 106
101 89
102 102
103 106

我知道如何使用子查询,但我想试试 Analytics。

问候

【问题讨论】:

【参考方案1】:

怎么样:

从 ( 中选择 * 选择 t.*, max(TIMESTAMP) over (partition by id) mx 从标签 t ) 其中 mx=TIMESTAMP;

【讨论】:

【参考方案2】:

如果没有子查询,您的查询将无法解决。

select acc,sum(bal + res) from table_name where timestamp in (通过具有 hax(timestamp) 问候。

【讨论】:

以上是关于使用 Oracle 分析函数从使用 max 的列中获取数据而不是另一列的主要内容,如果未能解决你的问题,请参考以下文章

如何计算Oracle SQL中从右侧开始的列中有多少个零

想要从 ORACLE SQL 中的 2 个单独的列中为一个团队提供平均点

如何从 SQL Server 存储过程中的 3 列中获取 MAX 值?

oracle查询将不同的列填充到一列中

我想编写一个 sql (Oracle SQL) 查询来从特定字符之后的列中选择字符串的一部分

oracle中怎么判断查询的列中是不是包含字母?