以前也有人问过类似的问题,我尝试过所有这些解决方案。不幸的是,他们中没有一个为我工作。这是我的要求。有一个包含column1 (即PK)、column2、column3、column4、column5的表。除第一列(PK)外,所有列都可能在不同的行中具有重复的值。但是,我想要拉出一个只有一个条件的所有行的列表,column2不能重复。如果column2中有多个具有重复值的行,我只想要任何行(比如第一个行,可以使用min(Column1)来完成),而忽略column2中具有相同值的行。
我尝试了group,但没有工作,因为group要求我将所有列都分组,这将导致所有列的组合都是唯一的。
编辑
谢谢大家让我走上正轨。我尝试了很多事情,最后我想我找到了正确的答案。如果你看到任何问题,请评论。
select * from myTable where column1 in (select MIN(column1) from myTable group by column2)
发布于 2014-08-14 20:46:05
要获得包含最小column1
值的完整行,可以使用解析函数来分配由column1
分区按column2
排序的行的顺序。
然后,您只需选择第1行(每个分区的第一行)的行,就可以得到具有最小值column1的完整的现有行;
WITH cte AS (
SELECT column1, column2, column3, column4, column5,
ROW_NUMBER() OVER (PARTITION BY column2 ORDER BY column1) rn
FROM test
)
SELECT column1, column2, column3, column4, column5
FROM cte
WHERE rn=1;
发布于 2014-08-14 20:31:08
只需将MIN()
应用于您想要检索的所有其他列,并在您希望唯一的一个列上使用group by
。
SELECT MIN(column1), column2, MIN(column3), MIN(column4), MIN(column5)
FROM your_table
GROUP BY column2
更新
正如注释中提到的,上面的解决方案并不返回完整的行,而是返回组中所有列的最小值。根据column1
中的最低值检索完整行
SELECT column1, column2, column3, column4, column5
FROM your_table t1
WHERE t1.id = (
SELECT TOP 1 t2.id
FROM your_table t2
WHERE t2.column2 = t1.column2
ORDER BY t2.column1
)
https://stackoverflow.com/questions/25321266
复制相似问题