如何在SQL的最后日期之前找到可能的反向重复项?

时间:2018-07-22 14:45:06

标签: sql sql-server duplicates reverse

曾经试图解决这个问题而没有成功...我有一个包含数据的表:

CREATE TABLE [dbo].[test](
    [ID1] [varchar](50) NULL,
    [ID2] [varchar](50) NULL,
    [Date] [date] NULL
)

INSERT INTO test VALUES (123,124,'2018-01-01'),
                        (123,125,'2018-01-01'),
                        (125,126,'2018-01-02'),
                        (123,125,'2018-01-02'),
                        (125,123,'2018-01-03'),
                        (126,121,'2018-01-04')

由于我只需要两对之间的LAST关系,结果应类似于:

ID1 ID2 Date
123 124 2018-01-01
125 126 2018-01-02
125 123 2018-01-03
126 121 2018-01-04

我发现许多解决方案仅包含两列,但没有最后日期。

谢谢!

Aleš

1 个答案:

答案 0 :(得分:4)

您是否正在寻找聚合?

select id1, id2, max(date)
from t
group by id1, id2;

编辑:

您似乎想对待id1 / id2对,而不管方向如何。如果是这样,请使用row_number()

select id1, id2, date
from (select t.* ,
             row_number() over (partition by (case when id1 < id2 then id1 else id2 end),
                                             (case when id1 < id2 then id2 else id1 end)
                                order by date desc
                               ) as seqnum                                             
      from test t
     ) t
where seqnum = 1;

Here是用于此解决方案的SQL Fiddle。