oracle sql-多重聚合:select max((迄今为止的整数))&总和(项目)在最大日期

时间:2017-11-28 17:15:47

标签: sql oracle group-by subquery

我有这个示例表:

group|type|sold|date
x      1  10  201801
x      1  44  201705
y      3  33  201801
y      3  3   201705
x      2  10  201701

我遇到了麻烦: 每组和类型的一条记录,最近一次销售的金额。 date是一个整数

group|type|sold|date
x      1  10  201801
y      3  33  201801
x      2  10  201701

我尝试选择每个column, sum(sold), max(cast(date to int)),对其余部分进行分组,但它不起作用。

我试过了WHERE date IN (select max(date))。我也无法做到这一点。 这比我想象的要复杂得多!

2 个答案:

答案 0 :(得分:1)

这是聚合LAST()函数的简单应用程序(许多开发人员选择忽略它,原因是逃避我)。我使用sum(sold),以防万一组中有相同的max日期。

请注意,GROUPDATE(以及TYPE实际上)也是Oracle关键字,不应用作列名。我将GROUP更改为GRP,将DATE更改为DT,您也应该这样做。

select   grp, type, sum(sold) keep (dense_rank last order by dt) as sold, max(dt) as dt
from     <table_name>
group by grp, type

答案 1 :(得分:0)

如果您愿意,可以使用row_number()。我使用了列名date_tgroup_t而不是日期和组resp。

SELECT group_t,
       TYPE,
       sold,
       date_t
FROM   (SELECT group_t,
               TYPE,
               sold,
               date_t,
               row_number()
                 over (
                   PARTITION BY group_t, TYPE
                   ORDER BY date_t DESC ) rn
        FROM   table1)
WHERE  rn = 1
ORDER  BY date_t DESC;