【发布时间】:2021-08-10 23:06:12
【问题描述】:
我在单个列 (completed_order, email, viewed) 中有 3 个活动,我想计算在每个 completed_order 活动之间发生了多少 email 活动并将它们保存在不同的列中。
我写了这个查询:
SELECT activity_id, ts, customer, activity ,
case when activity = 'completed_order'
then count(*)filter (where activity = 'email' ) over (partition by customer order by ts )
else null end as Aggregate_in_between
FROM public.activity_stream as az1 where customer = 'Lehmanns Marktstand' order by ts ;
我通过上述查询得到以下结果。
| activity_id | ts | customer | activity | agg_in_btw |
|---|---|---|---|---|
| 11089 | "1996-08-12 00:00:00+05" | "Lehmanns Marktstand" | "completed_order" | 0 |
| 10279 | "1996-08-13 00:00:00+05" | "Lehmanns Marktstand" | "completed_order" | 0 |
| 11077 | "1996-08-14 00:00:00+05" | "Lehmanns Marktstand" | "email" | |
| 11092 | "1996-08-17 00:00:00+05" | "Lehmanns Marktstand" | "viewed_page" | |
| 11088 | "1996-08-18 00:00:00+05" | "Lehmanns Marktstand" | "viewed_page" | |
| 10284 | "1996-08-19 00:00:00+05" | "Lehmanns Marktstand" | "completed_order" | 1 |
| 11078 | "1996-08-20 00:00:00+05" | "Lehmanns Marktstand" | "email" | |
| 11079 | "1996-08-21 00:00:00+05" | "Lehmanns Marktstand" | "email" | |
| 11080 | "1996-10-21 00:00:00+05" | "Lehmanns Marktstand" | "email" | |
| 10343 | "1996-10-31 00:00:00+05" | "Lehmanns Marktstand" | "completed_order" | 4 |
| 11090 | "1996-11-01 00:00:00+05" | "Lehmanns Marktstand" | "viewed_page" | |
| 11091 | "1996-11-02 00:00:00+05" | "Lehmanns Marktstand" | "email" | |
| 10497 | "1997-04-04 00:00:00+05" | "Lehmanns Marktstand" | "completed_order" | 5 |
| 10522 | "1997-04-30 00:00:00+05" | "Lehmanns Marktstand" | "completed_order" | 5 |
我想要的结果应该是这样的
| activity_id | ts | customer | activity | agg_in_btw |
|---|---|---|---|---|
| 11089 | "1996-08-12 00:00:00+05" | "Lehmanns Marktstand" | "completed_order" | 0 |
| 10279 | "1996-08-13 00:00:00+05" | "Lehmanns Marktstand" | "completed_order" | 1 |
| 11077 | "1996-08-14 00:00:00+05" | "Lehmanns Marktstand" | "email" | |
| 11092 | "1996-08-17 00:00:00+05" | "Lehmanns Marktstand" | "viewed_page" | |
| 11088 | "1996-08-18 00:00:00+05" | "Lehmanns Marktstand" | "viewed_page" | |
| 10284 | "1996-08-19 00:00:00+05" | "Lehmanns Marktstand" | "completed_order" | 3 |
| 11078 | "1996-08-20 00:00:00+05" | "Lehmanns Marktstand" | "email" | |
| 11079 | "1996-08-21 00:00:00+05" | "Lehmanns Marktstand" | "email" | |
| 11080 | "1996-10-21 00:00:00+05" | "Lehmanns Marktstand" | "email" | |
| 10343 | "1996-10-31 00:00:00+05" | "Lehmanns Marktstand" | "completed_order" | 1 |
| 11090 | "1996-11-01 00:00:00+05" | "Lehmanns Marktstand" | "viewed_page" | |
| 11091 | "1996-11-02 00:00:00+05" | "Lehmanns Marktstand" | "email" | |
| 10497 | "1997-04-04 00:00:00+05" | "Lehmanns Marktstand" | "completed_order" | 0 |
| 10522 | "1997-04-30 00:00:00+05" | "Lehmanns Marktstand" | "completed_order" | 0 |
【问题讨论】:
-
我已经添加了答案。希望这会有所帮助
标签: sql postgresql count window-functions