如何解决使用分层标准获取不同的值
我想弄清楚如何使用包含数千条记录的表格并根据一些标准将其提取出来。然而,标准是分层的。最好用一个例子来解释:
产品密钥 | 产品代码 | 数量捆绑 | 产品组 | 产品到期 |
---|---|---|---|---|
1 | 000ABC | 1 | 小工具 | 空 |
2 | 000ABC | 5 | 小工具 | 空 |
3 | 000ABC | 1 | 小工具 | 空 |
4 | 000ABC | 10 | 小工具 | 空 |
5 | 000DEF | 1 | 小工具 | 空 |
6 | 000DEF | 10 | 小工具 | 01/15/2021 |
7 | 000DEF | 10 | 小工具 | 空 |
8 | 000HIJ | 5 | 小工具 | 11/20/2020 |
9 | 000HIJ | 10 | 小工具 | 空 |
10 | 000HIJ | 5 | 小工具 | 空 |
使用以上作为示例数据,我希望最终得到一个列表,其中对于每个产品代码,我们只返回一个产品密钥。标准是:如果产品代码的数量捆绑值 = 1,则使用该产品密钥,如果产品代码有多个数量捆绑 = 1,并且这两个产品密钥都没有过期,则使用最小的产品密钥,如果产品代码没有 Qty Bundle = 1,只需取未过期的最小产品密钥即可。
基于这些标准,脚本的结果应该是:
任何建议都会有所帮助!
谢谢!
解决方法
您可以将 row_number()
与适当的排序条件结合使用:
select t.*
from (select t.*,row_number() over (partition by productcode
order by (case when qty_bundle = 1 and expiry is null then 1
else 2
end),(case when expiry is not null then 1 else 2
else 3
end),productkey
) as seqnum
from t
) t
where seqnum = 1;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。