如何选择具有指定条件的不同行

时间:2012-12-02 07:55:35

标签: sql sql-server

假设有一个表

_ _
a 1
a 2
b 2
c 3
c 4
c 1
d 2
e 5
e 6

如何选择每组所有行的不同最小值?

所以这里的预期结果是:

_ _
a 1
b 2
c 1
d 2
e 5

修改

我的实际表包含更多列,我想全部选择它们。行仅在最后一列(示例中的第二列)中有所不同。我是SQL的新手,可能我的问题在初始视图中是不正确的。

实际架构是:

| day | currency ('EUR', 'USD') | diff (integer) | id (foreign key) |

重复对(day, currency)的差异为(diff, id)。我希望看到一张表格中有一对(day, currency)的表格,原始表格中只有diff

谢谢!

4 个答案:

答案 0 :(得分:4)

在你的情况下,它就像这样简单:

select column1, min(column2) as column2
from table
group by column1

对于两列以上我可以建议:

select top 1 with ties
    t.column1, t.column2, t.column3
from table as t
order by row_number() over (partition by t.column1 order by t.column2)

看一下这篇文章https://stackoverflow.com/a/13652861/1744834

答案 1 :(得分:2)

您可以使用排名函数ROW_NUMBER()对CTE执行此操作。特别是,如果除了这两列之外还有更多的列,它将给出如下的distict值:

;WITH RankedCTE
AS
(
   SELECT *, ROW_NUMBER() OVER(PARTITION BY column1 ORDER BY Colmn2 ) rownum
   FROM Table
)
SELECT column1, column2
FROM RankedCTE
WHERE rownum = 1;

这会给你:

COLUMN1   COLUMN2
   a         1
   b         2
   c         1
   d         2
   e         5

SQL Fiddle Demo

答案 2 :(得分:1)

SELECT ColOne,Min(ColTwo)  从表 GROUP BY ColOne 通过ColOne订购

PS:不是机器的前面,但请试一试。

答案 3 :(得分:1)

select MIN(col2),col1
from dbo.Table_1
group by col1