如何从单个 table 中获取重复记录取决于列值?

How to get Duplicate records from single table depends on column value?

我得到了 table 这样的:

declare @t1 table(Pat_Ref int,Fname VARCHAR(20), Sname VARCHAR(20),minor VARCHAR(1),SourceSys VARCHAR(40),regdt datetime)

insert into @t1 
values   (111,'John', 'Wayne','N','ick','2015-06-09 21:31:09.253')
        ,(111,'John', 'Wayne','N','ick','2014-05-09 21:31:09.253')
        ,(111,'John', 'Wayne',null,'hpk','2015-04-09 21:31:09.253')

        ,(112,'Jill', 'Smith','N','ick','2015-01-08 21:31:09.253')
        ,(112,'Jill', 'Smith',null,'hpk','2015-05-01 21:31:09.253')

        ,(113,'Bill', 'Peyton','N','ick','2015-06-09 21:31:09.253')

        ,(114,'Gill', 'Peyton','N','hpk','2015-06-09 21:31:09.253')
        ,(114,'Gill', 'Peyton','N','hpk','2015-06-12 21:31:09.253')
        ,(114,'Gill', 'Peyton','N','ick','2006-10-22 21:31:09.253')

        ,(115,'Billy', 'Peyton','N','hpk','2015-06-09 21:31:09.253')

        ,(116,'William', 'nixon','N','ick','2015-06-09 21:31:09.253')
        ,(116,'William', 'nixon','N','ick','2015-06-09 21:31:09.253')

我想要基于 Pat_Ref 的重复记录以及 SourceSys 列上 ickhpk 之间的值。如果发现重复记录行必须是最近的日期 regdt

Note:从上面的tablePat_Ref=116,有两行但是不能重复,因为它的SourceSys值是一样的ick .如果该值在行上是 ick 而在另一行上是 hpk 那么它可以成为重复行。

我想要这样的结果;

Pat_Ref     Fname   Sname   minor   SourceSys   regdt
111         John    Wayne   N       ick         2015-06-09 21:31:09.253
112         Jill    Smith   NULL    hpk         2015-05-01 21:31:09.253
114         Gill    Peyton  N       hpk         2015-06-12 21:31:09.253

任何帮助。谢谢

希望我没听错,这就是我想出的查询,它似乎 return 预期结果:

SELECT Pat_Ref, Fname, Sname, minor, SourceSys, regdt
FROM (
    SELECT ROW_NUMBER() OVER (PARTITION BY Pat_ReF ORDER BY regdt DESC) AS RN, *
    FROM @t1
) AS T
CROSS APPLY (
    SELECT 1
    FROM @t1 AS T2
    WHERE T2.Pat_Ref = T.Pat_Ref
        AND T2.SourceSys BETWEEN 'hck' AND 'ick'
    GROUP BY T2.Pat_Ref
    HAVING COUNT(DISTINCT T2.SourceSys) > 1
    ) AS T2(UQ)
WHERE T.RN = 1;

解释: 我正在使用 ROW_NUMBER() 为每个 Pat_Ref 获取最新的 regdt 以防需要过滤。

我正在使用 CROSS APPLY 为每个 Pat_Ref SourceSys 获取 DISTINCT COUNT(),如果我理解正确,它必须匹配 ICK 和 HCK。

有任何问题 - 让我知道。