我需要SQL方面的帮助
我有一个名为 A 的历史表。它具有月份ID,srvc密钥等。
我需要检查保管密钥是否是该表 A 中的新客户。逻辑是 - 查看该 cust 键对于当前月份 ID 是否是新的,并且不存在前几个月(小于当前月份 ID)。
为了说明,
我的当前月份 ID = 2022 年 2 月 cust 密钥必须存在于 2022 年 2 月,但不能存在于 2022 年 1 月、2021 年 12 月,..,依此类推。
另外,是否可以标记 cust 密钥是否存在于 2022 年 2 月和 2022 年 1 月,但不存在于 2021 年 12 月,依此类推。
select A.*,B.level_1, B.level_2, B.level_3, B.LE,
case when cust_key in ('2100707688',
'1xxx4',
'1xxxx',
'28xxxx1',
'2xxxxxx',
) then 'New' else 'Old' end as Tag,
A.NET_AMT/(nullif(A.prod_cnt,0)*B.LE) as ARPU
嗨@NickW,
感谢您的回复,我需要的是下面的示例历史表中的它,我需要标记本月(202202)的新CNumber。他们 是新的,因为 CNumber2 没有出现在 202201,202112,20211 中。我不在乎它是否出现在 202110 或更少。我只关心没有出现的 CNumber 最近 3 个月。
C编号月份ID 1 202202 1 202201 1 202112 1 202111 2 202202 2 202105 2 202104 2 202103 2 202102 2 202101 3 202202 3 202201 3 202112 3 202111 3 202110 3 202109
根据此示例,只有 CNumber 2 满足此规则,因为它出现在202202上,但不出现在202201 202112 202111中。
接下来,我还想标记 CNumber 谁是 2022 年 1 月的新人。
在本例中,当前月份 ID = 202201。现在,CNumber不应该出现在202112,20211,202110中,以便能够说它是新的。
接下来,还想标记 2022 年 12 月的新人 CNumber。现在,CNumber不应该出现在20211,202110,202109中,以便能够判断它们是新的。
等等..
我的目标是通过月份 ID 标记客户首次出现在历史表中的时间。我假设那是他们的预订日期。因此,在表格中,我的目标是查看名为预订日期的列。
我们可以使用 cte 来获取帐户第一个条目的月份。有了它,我们可以根据需要进行比较和计算。
create table sales( cnumber int, salesDate date);
insert into sales values (1,'2021-11-15'), (1,'2021-12-15'), (1,'2022-01-15'), (1,'2022-02-15'), (2,'2022-02-15');
with cre as ( select cnumber cnum, DATE_FORMAT(min(salesDate), '%Y-%m-01') monCre from sales group by cnumber), salesMonth as( select DATE_FORMAT(salesDate, '%Y-%m-01') as mon, cnumber cust from sales group by cnumber, mon) select cust customer, mon "month", case when mon = monCre then 'new' else 'existing' end as "status", TIMESTAMPDIFF(MONTH,monCre ,mon) as "account Age" from salesMonth join cre on cust = cnum order by cust, mon;
客户 | 月 | 状态 | 帐户年龄 -------: |:--------- |:------- |----------: 1 |2021-11-01 |新品 | 0 1 |2021-12-01 |现有 | 1 1 |2022-01-01 |现有 | 2 1 |2022-02-01 |现有 | 3 2 |2022-02-01 |新品 | 0
db<>小提琴在这里