【问题标题】:oracle sql- multiple aggregations: select max((integer to date)) & sum(items) at max dateoracle sql-多个聚合:在最大日期选择 max((integer to date)) & sum(items)
【发布时间】:2017-11-28 17:15:47
【问题描述】:

我有这个示例表:

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

我无法返回: 每个组和类型的一个记录,最近日期的销售量。日期是一个整数

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))。我也无法让它工作。 这比我想象的要棘手得多!

【问题讨论】:

  • oracle,我认为这个问题的解决方案会非常相似。道歉

标签: sql oracle group-by subquery


【解决方案1】:

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

请注意GROUPDATE(实际上也是TYPE)是Oracle 关键字,不应用作列名。我将GROUP 更改为GRPDATE 更改为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

【讨论】:

    【解决方案2】:

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

    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;   
    

    【讨论】:

      猜你喜欢
      • 2021-02-03
      • 1970-01-01
      • 1970-01-01
      • 2022-01-19
      • 2021-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-16
      相关资源
      最近更新 更多