如何在Presto SQL中为每个客户添加首次审批日期列?
需求:为每个客户添加首次审批日期列(Presto SQL实现)
基础表结构与数据
| date | customer_id | approved |
|---|---|---|
| 01/01/23 | a | false |
| 01/01/23 | b | false |
| 02/01/23 | a | true |
| 02/01/23 | b | false |
| 03/01/23 | a | true |
| 03/01/23 | b | true |
期望结果
需要新增approved_date列,展示每个customer_id的首次审批日期,最终结果如下:
| date | customer_id | approved | approved_date |
|---|---|---|---|
| 01/01/23 | a | false | 02/01/23 |
| 01/01/23 | b | false | 03/01/23 |
| 02/01/23 | a | true | 02/01/23 |
| 02/01/23 | b | false | 03/01/23 |
| 03/01/23 | a | true | 02/01/23 |
| 03/01/23 | b | true | 03/01/23 |
Presto SQL实现方案
利用窗口函数结合FILTER子句,筛选每个客户审批通过的记录并取最早日期,将该日期填充到对应客户的所有行中:
SELECT date, customer_id, approved, MIN(date) FILTER (WHERE approved = true) OVER (PARTITION BY customer_id) AS approved_date FROM your_table_name;
逻辑说明
PARTITION BY customer_id:按客户ID分组处理数据FILTER (WHERE approved = true):仅保留当前客户下审批通过的记录MIN(date):从筛选后的记录中取最早日期,即该客户的首次审批日期- 窗口函数
OVER:将首次审批日期同步到该客户的每一行数据中
内容的提问来源于stack exchange,提问作者bobbytici
相关产品推荐
相关产品推荐

