sql - 在 Oracle 中选择分组集中的最新数据

标签 sql oracle oracle11g group-by

我正在编写一个程序来查询 Oracle 中的一些数据并将其分组:

Account  Amt Due   Last payment  Last Payment Date (mm/dd/yyyy format)
1234      10.00       5.00          12/12/2013
1234      35.00       8.00          12/12/2013
3293      15.00      10.00          11/18/2013
4455       8.00       3.00          5/23/2013
4455      14.00       5.00          10/18/2013

我想对数据进行分组,所以每个账户只有一条记录,应付金额和最后一笔付款相加。除非最后付款日期不同——如果日期不同,那么我只想要最后付款。所以我想得到这样的结果:

Account  Amt Due   Last payment  Last Payment Date
1234      45.00      13.00          12/12/2013
3293      15.00      10.00          11/18/2013
4455      22.00       5.00          10/18/2013

我在做类似的事情

select Account, sum (AmtDue), sum (LastPmt), Max (LastPmtDt)
from all my tables
group by Account

但是,这对上面的最后一条记录不起作用,因为最后一次付款只是 10 月 18 日的 $5.00,而不是 10 月 18 日的总和。

如果我按 Account 和 LastPmtDt 分组,那么我会得到最后两条记录,但每个账户我只想要一条。

我还有其他要查询的数据,并且我在另一个字段上使用了 CASE、INSTR 和 LISTAGG(如果将它们组合给我这个子字符串和那个,则输出“两者”;否则如果它只给我这个子串,然后输出子串;否则如果它只给我另一个子串,那么输出那个)。看起来我可能需要类似的东西,但不是通过寻找特定日期。如果日期相同,则 sum (LastPmt) 和 max (LastPmtDt) 工作正常,如果它们不相同,那么我想忽略除了最近的 LastPmt 和 LastPmtDt 记录之外的所有记录。

哦,我的 LastPmt 和 LastPmtDt 字段已经是选择中的 case 语句。它们不是我已经可以访问的字段。我正在阅读有关 RANK 和 KEEP 的其他帖子,但要涉及这两个领域,我还需要对每个领域进行所有计算。查询所有内容,然后围绕它包装另一个查询以执行分组、求和和选择我想要的字段是否更有效?

相关:HAVING - GROUP BY to get the latest record

有人可以就如何解决这个问题提供一些指导吗?

最佳答案

试试这个:

select Account, 
       sum ( Amt_Due), 
       sum (CASE WHEN Last_Payment_Date = last_dat THEN Last_payment ELSE 0 END), 
       Max (Last_Payment_Date)
from (
  SELECT t.*,
       max( Last_Payment_Date ) OVER( partition by Account ) last_dat
  FROM table1 t
)
group by Account

演示 --> http://www.sqlfiddle.com/#!4/fc650/8

关于sql - 在 Oracle 中选择分组集中的最新数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20790123/

相关文章:

sql - Postgresql 在 UPDATE 请求中添加 WHERE 子句

sql - Oracle:如何为所有开发人员启用闪回 "as of"查询?

sql - 读取文本文件以将数据插入到 Oracle SQL 表中

sql - CTE和TEMP表之间的主要区别是什么?

android - 打印出从 SQLiteQueryBuilder 构建的 sql 语句

php - 让我的 PHP 表单成功查询数据库以检查电子邮件是否已存在时出现问题

java - 无效的列索引错误oracle db java

r - 在 Oracle 服务器上使用具有 IP 地址且没有 DSN 的新 odbc 包

oracle - 触发器被同一个表触发后无法读取该表

java - 使用 JDBC 可调用语句从 Java 调用的 Oracle 存储过程中绑定(bind)参数的顺序不正确