【发布时间】:2021-02-22 06:26:27
【问题描述】:
您好,我有一个如下所示的数据表
| OrderID | Date | Product Name | CustomerID |
|---|---|---|---|
| 476070 | February 24,2021 | WARRANTY CLAIM | ABC123 |
| 476069 | February 22,2021 | PRODUCT C | ABC123 |
| 476068 | February 10,2021 | WARRANTY CLAIM | ABC123 |
| 476067 | February 1,2021 | WARRANTY CLAIM | ABC123 |
| 476064 | January 23,2021 | PRODUCT B | ABC123 |
| 476051 | January 10,2021 | WARRANTY CLAIM | ABC123 |
| 475023 | January 1 , 2021 | PRODUCT A | ABC123 |
我想要实现的是对于每个保修索赔,我想获得该客户的最后一次产品购买。
所以意思就是我想要达到的输出是这样的
| OrderID | Date | Product Name | CustomerID | LASTPRODUCTPURCHASE |
|---|---|---|---|---|
| 476070 | February 24,2021 | WARRANTY CLAIM | ABC123 | PRODUCT C |
| 476069 | February 22,2021 | PRODUCT C | ABC123 | NULL |
| 476068 | February 10,2021 | WARRANTY CLAIM | ABC123 | PRODUCT B |
| 476067 | February 1,2021 | WARRANTY CLAIM | ABC123 | PRODUCT B |
| 476064 | January 23,2021 | PRODUCT B | ABC123 | NULL |
| 476051 | January 10,2021 | WARRANTY CLAIM | ABC123 | PRODUCT A |
| 475023 | January 1 , 2021 | PRODUCT A | ABC123 | NULL |
我已经尝试过 LAG 和 MAXIF,但它会返回该特定客户的先前订单或最新订单。我需要该客户的LAST产品购买,并且仅适用于保修索赔订单。
我正在为 CTE 解决方案获取此输出
这是我运行的查询:
WITH cte AS (
SELECT *, MAX(CASE WHEN productName <> 'Warranty Service' OR productName <> 'Warranty Collect' OR productName <> 'Warranty Inspection' OR productName <> 'Delivery' THEN id END) OVER
(PARTITION BY vpn ORDER BY ordercompleted_at) MaxOrderID
FROM baterikudatawarehouse.bateriku_production.BaterikuOrderTrafficJune2020
where orderStatus = 'completed' and vpn = 'QMY70' order by ordercompleted_at DESC
)
SELECT t1.id ,t1.ordercompleted_at, t1.productName, t1.vpn,
CASE WHEN t1.productName = 'Warranty Service' OR t1.productName = 'Warranty Collect' OR t1.productName = 'Delivery' OR t1.productName = 'Warranty Inspection'
THEN t2.productName END AS LASTPRODUCTPURCHASE
FROM cte t1
INNER JOIN baterikudatawarehouse.bateriku_production.BaterikuOrderTrafficJune2020 t2
ON t2.vpn = t1.vpn AND
t2.id = t1.MaxOrderId ORDER BY t1.ordercompleted_at DESC;
【问题讨论】:
标签: sql postgresql google-bigquery