我有這個交易表,我如何查詢一個人是否是新客戶、回傳成員、回傳非成員。例如,當序列 = 1 時,id 1 是新客戶,他們只能在購買型別(成員)后成為成員/回傳成員,例如 id 1,序列 4 是回傳非成員,因為這是他們第一次購買會員。在該事務 seq 5 之后,他們現在是回傳成員
而對于 id 2 從未購買過會員,因此第一個序列將是新客戶,但其他人將回傳非會員,直到他們購買會員。
問題
| ID | 型別 | 日期 | 順序 |
|---|---|---|---|
| 1 | 成員 | 2021-02-24 | 4 |
| 1 | 產品 | 2021-01-03 | 2 |
| 2 | 服務 | 2022-04-21 | 5 |
| 1 | 產品 | 2021-02-01 | 3 |
| 2 | 服務 | 2022-02-16 | 3 |
| 1 | 成員 | 2022-02-03 | 6 |
| 1 | 服務 | 2021-10-23 | 5 |
| 2 | 產品 | 2022-01-03 | 2 |
| 1 | 服務 | 2020-12-16 | 1 |
| 2 | 產品 | 2022-03-30 | 4 |
| 2 | 服務 | 2021-12-01 | 1 |
| 1 | 成員 | 2022-04-03 | 7 |
結果
| ID | 型別 | 日期 | 順序 | 新專欄 |
|---|---|---|---|---|
| 1 | 成員 | 2021-02-24 | 4 | 回傳非會員 |
| 1 | 產品 | 2021-01-03 | 2 | 回傳非會員 |
| 2 | 服務 | 2022-04-21 | 5 | 回傳非會員 |
| 1 | 產品 | 2021-02-01 | 3 | 回傳非會員 |
| 2 | 服務 | 2022-02-16 | 3 | 回傳非會員 |
| 1 | 成員 | 2022-02-03 | 6 | 回歸會員 |
| 1 | 服務 | 2021-10-23 | 5 | 回歸會員 |
| 2 | 產品 | 2022-01-03 | 2 | 回傳非會員 |
| 1 | 服務 | 2020-12-16 | 1 | 新客戶 |
| 2 | 產品 | 2022-03-30 | 4 | 回傳非會員 |
| 2 | 服務 | 2021-12-01 | 1 | 新客戶 |
| 1 | 成員 | 2022-04-03 | 7 | 回歸會員 |
uj5u.com熱心網友回復:
您可以通過額外的子查詢以一種非常嚴格的方式來完成它,但這并不是性能方面的最佳方式。
SELECT
*,
CASE
WHEN t.Sequence = 1 THEN 'New Client'
WHEN
EXISTS (
SELECT *
FROM YourTable AS th
WHERE
th.Date < t.Date
AND th.Id = t.Id
AND th.Type ILIKE 'Member'
) THEN 'Returning-Member'
ELSE 'Returning-Non-Member'
END AS Membership
FROM YourTable AS t
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/467479.html
標籤:PostgreSQL 亚马逊红移
