首页 > 解决方案 > 选择仅在其中 3 个中具有不同的多个列

问题描述

我有一个表,我需要返回大约 14 个列值,但只为某些列上的重复项返回 1 行。

第二个问题是,在重复项之间,我需要在不需要唯一的列之一中保留具有最大 int 的那个。

由于表格有点大,我正在寻求以最有效的方式执行此操作的建议。

我应该做一个小组吗?

我的表有点像这样,我会简化列数。

ID(UniqueIdentifier)                  | ACCID(UniqueIdentifier)               |   DateTime(DateTime)    | distance(int)|type(int)
28761188-0886-E911-822F-DD1FA635D450    1238FD8A-BD00-411A-A81C-0F6F5C026BCC    2019-06-03 14:04:41.000        2             3
41761188-0886-E911-822F-DD1FA635D450    1238FD8A-BD00-411A-A81C-0F6F5C026BCC    2019-06-03 14:04:41.000        1             3

我应该只选择 ACCID 和 DATETIME 是唯一的,主中的列 ID 所以永远不会重复,我需要保持距离最大的行。

标签: sqlsql-serverdistinct

解决方案


您可以使用ROW_NUMBER()窗口函数,如下所示:

select *
from (
  select
    id,
    accid,
    datetime,
    distance,
    type,
    row_number() over(partition by accid, datetime order by type desc) as rn
  from t
) x
where rn = 1

如果要显示多个“关系”,则替换ROW_NUMBER()RANK().


推荐阅读