我的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不相似。如果您不这么认为,请告诉我,我可以澄清一下。
答案 0 :(得分:3)
试试这个
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;