标记时间序列数据库中的差距和新条目-客户流失和新客户

jv4diomz  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(288)

我试图在我的数据库中标记新客户和吸引的客户。我们的目标是要有一个非常简单的平桌,我可以在那里拉“新客户”和“失去的客户”为给定的业务和给定的一年。
我有一张这样的table:

BUSINESS, CUSTOMER, YEAR
Business X, Customer A, 2001
Business X, Customer A, 2002
Business X, Customer A, 2003
Business X, Customer B, 2004
Business X, Customer B, 2005
Business Y, Customer A, 2004

我想在我的表中添加两个新的列,这样我就可以标记某个客户在当年是“新的”,或者在该业务线的下一年是“消失的”。所以最终结果应该是这样的:

BUSINESS, CUSTOMER, YEAR, NEW, GONE
Business X, Customer A, 2001, NEW, NULL
Business X, Customer A, 2002, NULL, NULL
Business X, Customer A, 2003, NULL, GONE
Business X, Customer B, 2004, NEW, NULL
Business X, Customer B, 2005, NULL, GONE
Business Y, Customer A, 2004, NEW, NULL

非常感谢你的帮助。我在sql中也在google cloud dataprep中进行这方面的工作,我是一个糟糕的程序员,对暴力技术非常开放!!

zsohkypk

zsohkypk1#

一种解决方案是使用相关子查询,其中 Exists() 条件。
在第一个子查询中,我们确定 YEAR 存在于特定的 BUSINESS , CUSTOMER 以及 YEAR 组合。如果它 exists() ,我们设置 NEWNULL (因为今年之前已经有另一行了)。
在第二个子查询中,我们确定 YEAR 存在于特定的 BUSINESS , CUSTOMER 以及 YEAR 组合。如果它 exists() ,我们设置 GONENULL (因为今年之后已经有另一行了)。

SELECT 
 t1.BUSINESS, 
 t1.CUSTOMER, 
 t1.YEAR, 
 IF ( EXISTS(SELECT 1 
             FROM your_table AS t2 
             WHERE t2.BUSINESS = t1.BUSINESS AND 
                   t2.CUSTOMER = t1.CUSTOMER AND 
                   t2.YEAR < t1.YEAR 
             LIMIT 1), NULL, 'NEW' ) AS NEW, 
 IF ( EXISTS(SELECT 1 
             FROM your_table AS t3 
             WHERE t3.BUSINESS = t1.BUSINESS AND 
                   t3.CUSTOMER = t1.CUSTOMER AND 
                   t3.YEAR > t1.YEAR 
             LIMIT 1), NULL, 'GONE' ) AS GONE
FROM your_table AS t1

相关问题