在T-SQL中检索另一行<>'X'时,具有最新日期的数据行

问题描述 投票:2回答:2

我有一个客户数据库,这些数据库具有其成员的生效日期和结束日期,两个单独的列。但是,数据有点脏,客户可以拥有多行数据,其中只有一行是他们最近的会员记录。如果成员的结束日期为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的情况下进行操作,我需要包括他和类似的客户。

感谢您的任何帮助!

我有一个客户数据库,这些数据库具有其成员的生效日期和结束日期,两个单独的列。数据有点脏,但是客户可以有多行数据,只有...

sql sql-server tsql date greatest-n-per-group
2个回答
2
投票

您可以使用row_number()和条件排序:


0
投票

想知道什么使您的代码更好?

© www.soinside.com 2019 - 2024. All rights reserved.