我有这个示例表:
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))
。我也无法做到这一点。
这比我想象的要复杂得多!
答案 0 :(得分:1)
这是聚合LAST()
函数的简单应用程序(许多开发人员选择忽略它,原因是逃避我)。我使用sum(sold)
,以防万一组中有相同的max
日期。
请注意,GROUP
和DATE
(以及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_t
和group_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;