创建新的 sql 列以获得新值
create new sql column to get new value
我有这笔交易 table 我如何查询一个人是否是新客户、回头客、回头客、非会员。例如,当 sequence = 1 时,id 1 是一个新客户,他们只能在购买类型(成员)后成为 member/returning-member 例如 id 1 和 sequence 4 是返回的非成员,因为这是他们第一次购买会员。在交易 seq 5 之后,他们现在是回头客
虽然 id 2 从未购买过会员,因此第一个序列将是新客户,但其他人将是非会员回头客,直到他们购买会员。
问题
id
Type
Date
Sequence
1
Member
2021-02-24
4
1
product
2021-01-03
2
2
service
2022-04-21
5
1
product
2021-02-01
3
2
service
2022-02-16
3
1
Member
2022-02-03
6
1
Service
2021-10-23
5
2
product
2022-01-03
2
1
service
2020-12-16
1
2
product
2022-03-30
4
2
service
2021-12-01
1
1
Member
2022-04-03
7
结果
id
Type
Date
Sequence
New column
1
Member
2021-02-24
4
Returning-Non-member
1
product
2021-01-03
2
Returning-Non-member
2
service
2022-04-21
5
Returning-Non-member
1
product
2021-02-01
3
Returning-Non-Member
2
service
2022-02-16
3
Returning-Non-member
1
Member
2022-02-03
6
Returning-Member
1
Service
2021-10-23
5
Returning-Member
2
product
2022-01-03
2
Returning-Non-Member
1
service
2020-12-16
1
New Client
2
product
2022-03-30
4
Returning-Non-Member
2
service
2021-12-01
1
New Client
1
Member
2022-04-03
7
Returning-Member
您可以使用额外的子查询以非常直接的方式完成此操作,但就性能而言,这不是最佳方式。
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
我有这笔交易 table 我如何查询一个人是否是新客户、回头客、回头客、非会员。例如,当 sequence = 1 时,id 1 是一个新客户,他们只能在购买类型(成员)后成为 member/returning-member 例如 id 1 和 sequence 4 是返回的非成员,因为这是他们第一次购买会员。在交易 seq 5 之后,他们现在是回头客
虽然 id 2 从未购买过会员,因此第一个序列将是新客户,但其他人将是非会员回头客,直到他们购买会员。
问题
id | Type | Date | Sequence |
---|---|---|---|
1 | Member | 2021-02-24 | 4 |
1 | product | 2021-01-03 | 2 |
2 | service | 2022-04-21 | 5 |
1 | product | 2021-02-01 | 3 |
2 | service | 2022-02-16 | 3 |
1 | Member | 2022-02-03 | 6 |
1 | Service | 2021-10-23 | 5 |
2 | product | 2022-01-03 | 2 |
1 | service | 2020-12-16 | 1 |
2 | product | 2022-03-30 | 4 |
2 | service | 2021-12-01 | 1 |
1 | Member | 2022-04-03 | 7 |
结果
id | Type | Date | Sequence | New column |
---|---|---|---|---|
1 | Member | 2021-02-24 | 4 | Returning-Non-member |
1 | product | 2021-01-03 | 2 | Returning-Non-member |
2 | service | 2022-04-21 | 5 | Returning-Non-member |
1 | product | 2021-02-01 | 3 | Returning-Non-Member |
2 | service | 2022-02-16 | 3 | Returning-Non-member |
1 | Member | 2022-02-03 | 6 | Returning-Member |
1 | Service | 2021-10-23 | 5 | Returning-Member |
2 | product | 2022-01-03 | 2 | Returning-Non-Member |
1 | service | 2020-12-16 | 1 | New Client |
2 | product | 2022-03-30 | 4 | Returning-Non-Member |
2 | service | 2021-12-01 | 1 | New Client |
1 | Member | 2022-04-03 | 7 | Returning-Member |
您可以使用额外的子查询以非常直接的方式完成此操作,但就性能而言,这不是最佳方式。
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