创建新的 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