首页 > 解决方案 > 如何从重复记录中获取最新更新的数据?

问题描述

我有 3 张桌子。Table1 具有 memberhsip id 并加入到具有注册 id 的 Tbl2。Tbl3 有我感兴趣的数据。在一个完美的世界中,一个成员不应该在同一日期期间有 2 个注册 ID;但是,它确实有。我对最近更新的注册 ID 感兴趣。标准之一是生效日期和任期日期。例如,如果我正在寻找从 1/1/2018 到 2/1/2018 的生效日期和期限日期,SQL 将为成员 1 带来 2 条匹配记录。如何从 Tbl3 中获取“上次更新”的最大值。

表1

Member iD
---------
|   1   |
---------
|   1   |
---------

表2

|Member ID |  Enrollment ID |
|--------- | ---------------|
|    1     |        E1      |
|----------| ---------------|
|    1     |        E2      |
|---------------------------|

Tb3

---------------------------------------------|-------------------------|
| Enrollment ID | Effective Date | Term Date |       Last Update       |
|---------------|----------------|-----------|-------------------------|
|      E1       | 1/1/2018       |  2/1/2018 | 2018-01-19 11:20:03.483 |
|---------------|----------------|-----------|-------------------------|
|      E2       | 1/1/2018       |  2/1/2018 | 2018-01-19 13:28:20.923 |
|---------------|----------------|-----------|-------------------------|

标签: sqlsql-servergreatest-n-per-group

解决方案


我不确定您的预期输出应该是什么,并且在没有提供数据的情况下我没有对此进行测试 - 但您可以根据需要在选择中编辑以下内容,它应该为您提供最大上次更新日期:

select * from 
(
select a.[member id]
    , b.[enrollment id]
    , c.[effective date]
    , c.[term date]
    , c.[last update]
    , row_number() over (partition by a.[member id] order by c.[last update] desc) row_num
        from tbl1 a
            join tbl2 b on a.[member id] = b.[member id]
            join tbl3 c on b.[enrollment id] = c.[enrollment id]
) x
where row_num = 1
;

推荐阅读