sql - 如何使用 SQL 按最后日期查找可能的反向重复项?

标签 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

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

谢谢!

阿莱什

最佳答案

您只是在寻找聚合吗?

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。

关于sql - 如何使用 SQL 按最后日期查找可能的反向重复项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51466222/

相关文章:

MySQL 按 "best match"排序

sql-server - 使用带有 WHERE 中断的 cte UPDATE SET

sql-server - Azure SQL 中主数据库的安全角色

php - 在二维数组中分解多个以逗号分隔的字符串,然后获取所有唯一值

Mysql 主键重复条目(AUTO_INCRMENT)

php - 同时插入,有可能出现这种情况吗?

mysql - 通用自增外键

mysql - 请帮我解决我正在尝试编写的sql查询

sql - 如何在递归表(SQL)中获取 2 行的最低公共(public)父级

sql-server - 如何将 MS SQL 数据类型 numeric(19, 0) 映射到 .NET 类型