我有一个客户数据库,这些数据库具有其成员的生效日期和结束日期,两个单独的列。但是,数据有点脏,客户可以拥有多行数据,其中只有一行是他们最近的会员记录。如果成员的结束日期为NULL,则将其视为“活动”。
数据看起来像这样:
Name ID Membership_Effective_Date Membership_End_Date
---------------------------------------------------------------------------
Bob 1 1/1/2020 NULL
Bob 1 1/1/2017 1/2/2017
Bob 1 1/1/2017 9/1/2018
Kim 2 1/1/2019 1/1/2020
Kim 2 1/1/2019 12/31/2019
Susan 3 1/1/2018 12/31/2018
Susan 3 1/1/2019 1/1/2019
Larry 4 1/1/2020 1/1/2020
我需要检索不活跃和活跃客户列表的最新会员结束日期。
我想要的结果应如下所示:
Name ID Membership_Effective_Date Membership_End_Date
Bob 1 1/1/2020 NULL
Kim 2 1/1/2019 1/1/2020
Susan 3 1/1/2018 12/31/2018
Larry 4 1/1/2020 1/1/2020
对于具有同时具有Membership_End_Date日期值的行和具有NULL值(Bob)的Membership_End_Date行的客户以及具有仅具有日期值的多行(Kim)的客户,我可以做到这一点没有问题。
我面临的挑战是苏珊(Susan)和拉里(Larry)等数据。它们都具有包含日期值的行,其中Membership_Effective_Date = Membership_End_Date。就拉里而言,这是他仅有的数据行。在Susan的情况下,Membership_Effective_Date = Membership_End_Date的行中的日期大于另一行,因此我当前的查询会自动将其选中。
问题是,我基本上需要编写一个查询,说明客户是否有多行数据,而其中有一行,其中Membership_Effective_Date = Membership_End_Date然后选择了最近的第二行数据。但是,如果客户只有一行数据,并且该行仅包含Membership_Effective_Date = Membership_End_Date的值,则选择该行。]
我无法弄清楚如何在不完全从数据提取中删除Larry的情况下进行操作,我需要包括他和类似的客户。
感谢您的任何帮助!
我有一个客户数据库,这些数据库具有其成员的生效日期和结束日期,两个单独的列。数据有点脏,但是客户可以有多行数据,只有...
您可以使用row_number()
和条件排序: