选择多个仅在其中三个具有不同的列

时间:2019-06-08 00:30:28

标签: sql sql-server distinct

我有一个表,我需要返回大约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永远不会重复,并且我需要使行保持最大距离。

2 个答案:

答案 0 :(得分:0)

您可以使用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()

答案 1 :(得分:0)

我建议将索引正确的相关子查询作为最快的方法:

select t.*
from t
where t.id = (select top (1) t2.id
              from t t2
              where t2.ACCID = t.ACCID
              order by t2.distance desc
             ) ;

最佳索引位于(ACCID, distance desc, id)