sql - SQL:使用 Partion By 替代 Group By 方法
问题描述
我在 DW 系统中有一个表(比如 AWS SnowFlake):
UPC_CODE A_PRICE A_QTY DATE COMPANY_CODE A_CAT
1001 100.25 2 2021-05-06 1 PB
1001 2122.75 10 2021-05-01 1 PB
1002 212.75 5 2021-05-07 2 PT
1002 3100.75 10 2021-05-01 2 PB
我正在寻找的是:
For each UPC_CODE and COMPANY_CODE the latest data should be picked up
所以结果表应该如下所示:
UPC_CODE A_PRICE A_QTY DATE COMPANY_CODE A_CAT
1001 100.25 2 2021-05-06 1 PB
1002 212.75 5 2021-05-07 2 PT
方法:在 SQL 字符串下面
SELECT UPC_CODE,A_PRICE,A_QTY,MAX(DATE) AS F_DATE,COMPANY_CODE,A_CAT
FROM <table_name>
GROUP BY 1,2,3,5,6
我可以使用另一种方法partionby()
吗?
解决方案
您当前的GROUP BY
查询并没有真正做到您的想法。这里的一种规范方法使用ROW_NUMBER
:
WITH cte AS (
SELECT *, ROW_NUMBER() OVER (PARTITION BY UPC_CODE, COMPANY_CODE ORDER BY DATE DESC) rn
FROM yourTable
)
SELECT UPC_CODE, A_PRICE, A_QTY, DATE, COMPANY_CODE, A_CAT
FROM cte
WHERE rn = 1;
如果您确实想使用一种GROUP BY
方法,这是一种方法:
SELECT t1.*
FROM yourTable t1
INNER JOIN
(
SELECT UPC_CODE, COMPANY_CODE, MAX(DATE) AS MAX_DATE
FROM yourTable
GROUP BY UPC_CODE, COMPANY_CODE
) t2
ON t2.UPC_CODE = t1.UPC_CODE AND
t2.COMPANY_CODE = t1.COMPANY_CODE AND
t2.MAX_DATE = t1.DATE;
推荐阅读
- ios - 将firebase添加到xcode项目时,AppAuth根本没有签名
- java - 来自具有基本身份验证和杰克逊的 URL 的 CSV
- google-cloud-platform - 我的云运行服务如何调用其他云运行服务?
- angular - 如何解决在角度 youtube 组件上的“DOMWindow”错误上执行“postMessage”失败
- vue.js - VueJS | 方法“watch”在组件定义中具有类型“object”
- python - 如何理解在 PyTorch 中创建叶张量?
- css - 在 iframe 中显示文件会导致 iPhone 出现问题
- google-analytics - 谷歌分析 API 的 access_token
- c++ - 在 C++ 中调用构造函数的正确方法是什么?
- amazon-web-services - 将 Maven 开发项目迁移到 AWS Code Pipeline 的最佳方法