查找具有与其某些列相关的唯一值的行

时间:2012-10-31 17:57:16

标签: sql sql-server-2008

我的SQL表是这样的:

id, name, value1, value2, value3, value4
1, xyz, 1, 2, 4, 1
2, xyz, 4, 2, 4, 1
3, abc, 4, 2, 4, 1
4, abc, 4, 2, 2, 1
5, abc, 4, 2, 2, 1

我想编写一个Sql查询,该查询返回其值任何(读取:value1,value2,value3,value4)已更改的行。所以结果输出是:

id, name, value1, value2, value3, value4
1, xyz, 1, 2, 4, 1
2, xyz, 4, 2, 4, 1
4, abc, 4, 2, 2, 1

据我所知,如果我只需要输出中的值,我可以使用Distinct或Group by:

select distinct value1,value2,value3,value4 from table;

但是,在输出中我也需要id和name列。

想知道我是否真的需要编写子查询或创建虚拟/内部表来获取结果。或者,有一种更聪明的方式?

我的问题与How to find out whether a table has some unique columns不相似。如果您不这么认为,请告诉我,我可以澄清一下。

2 个答案:

答案 0 :(得分:3)

试试这个

SQL FIDDLE EXAMPLE

select *
from table
where id in (select min(id) from temp group by value1,value2,value3,value4)

答案 1 :(得分:2)

嗯,对于你的更新问题,我相信你可以这样做:

;WITH CTE AS
(
    SELECT  *, 
            RN = ROW_NUMBER() OVER(PARTITION BY value1, value2, value3, value4 ORDER BY ID)
    FROM YourTable
)
SELECT id, name, value1, value2, value3, value4
FROM CTE
WHERE RN = 1;