使用GROUP BY / DISTINCT删除类似的行

时间:2017-06-05 11:45:20

标签: sql tsql group-by distinct

我目前在ID和其他元数据旁边有一个文档路径表,但是使用不同的ID多次引用相同的文件路径。

示例数据集:

ID           FullPath
1            \\some\file\path.txt
2            \\some\file\path.txt
3            \\some\file\path.txt
4            \\another\file\path.txt
5            \\another\file\path.txt

我想返回一组不同的路径,不需要其他ID。它可能是一个非常简单的GROUP BY聚合函数,但我无法弄明白。请帮忙!

我想我想要这些内容,但要从子查询而不是路径中选择ID,因为路径会导致它返回所有行。但我不能这样做和GROUP by FullPath!

select *
from Documents
where FullPath in (
    select min(FullPath)
    from Documents
    group by FullPath
)

我追随的结果:

ID           FullPath
1            \\some\file\path.txt
4            \\another\file\path.txt

5 个答案:

答案 0 :(得分:1)

如果我理解你的问题,有多种方法可以做你想要的。但是使用您选择的结构,子查询应该返回id而不是文件路径:

select d.*
from Documents d
where d.FullPath in (select min(d2.id)
                     from Documents d2
                     group by d2.FullPath
                    );

我更自然地得到两列:

select fullpath, min(id)
from Documents
group by fullpath;

或者,如果您想要其他列,请使用row_number()rank()

答案 1 :(得分:0)

你应该使用min(id)

  select *
  from Documents
  where id  in (
      select min(id) 
      from Documents
      group by FullPath
  )

答案 2 :(得分:0)

请使用Like

EXEC(” DELETE Duplicate_Row from( SELECT ROW_NUMBER()OVER(PARTITION BY id ORDER BY id)RN 来自文件
)AS Duplicate_Row WHERE Duplicate_Row.RN> 1' )

答案 3 :(得分:0)

我认为你可以使用group by:

SELECT id, FullPath FROM Documents GROUP BY FullPath;

答案 4 :(得分:0)

我会编写一个带字符串的函数,并将字符串返回到最后一个字符串。 例如。 fn_strip_path(' \ PLACE \ Here \ file.txt')返回' \ PLACE \ Here' 当然,fn_strip_path(' \ PLACE \ Here')会返回' \ PLACE'

然后从文档中选择不同的fn_strip_path(full_path)给你想要的