SAP HANA SQL按用户分组取最大qty、同qty取最大no的实现问题
问题原因
原有写法的子查询仅过滤掉了非最大qty的行,但同一个用户存在多条相同最大qty的记录时,子查询会返回多行,和表B关联后就会出现重复数据。
正确实现方案
使用ROW_NUMBER()窗口函数按用户分组,先按qty倒序排序,同qty时按no倒序排序,取每组排名第一的记录即可:
SELECT B.id, B.user, A.no FROM B LEFT JOIN ( SELECT user, no, ROW_NUMBER() OVER ( PARTITION BY user ORDER BY qty DESC, no DESC ) AS rn FROM A ) A ON A.user = B.user AND A.rn = 1;
如果需要兼容有多条完全相同qty和no的场景,也可以用聚合函数的方式实现:
SELECT B.id, B.user, C.max_no FROM B LEFT JOIN ( SELECT user, MAX(no) AS max_no FROM ( SELECT user, no, qty, MAX(qty) OVER (PARTITION BY user) AS max_qty FROM A ) T WHERE qty = max_qty GROUP BY user ) C ON C.user = B.user;
内容的提问来源于stack exchange,提问作者YuTing
相关产品推荐
相关产品推荐

