我检查了历史记录,对于类似问题有一些答案,但它们似乎太复杂了。
我有这样的桌子:
CUSTOMER_ID SELLER_ID MONTH ITEMS_SOLD
1 A 201702 3
1 B 201702 2
2 X 201902 7
2 Y 201902 8
我想列出仅对应于已售出最大商品的列(客户,销售商和月份)。理想的结果是:
CUSTOMER_ID SELLER_ID MONTH
1 A 201702
2 Y 201902
使用窗口功能:
select t.* -- list whichever columns you really want
from (select t.*,
row_number() over (partition by customer_id order by items_sold desc) as seqnum
from t
) t
where seqnum = 1;
注意:如果一个客户的多个月的最大值相同,则可以任意选择其中之一。如果要全部使用,请使用rank()
代替row_number()
。