-2

我的 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 列。

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

我的问题与如何找出表是否有一些独特的列不同。如果您有其他想法,请告诉我,我可以澄清一下。

4

2 回答 2

3

尝试这个

SQL 提琴示例

select *
from table
where id in (select min(id) from temp group by value1,value2,value3,value4)
于 2012-10-31T18:24:04.033 回答
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;
于 2012-10-31T18:24:13.207 回答