2

假设有一张桌子

_ _
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

4 回答 4

7

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

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

于 2012-12-02T07:58:47.577 回答
2

您可以通过 CTE 使用排名函数ROW_NUMBER()来执行此操作。特别是,如果除了这两列之外还有更多的列,它将给出如下的 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 小提琴演示

于 2012-12-02T07:57:07.577 回答
1

SELECT ColOne, Min(ColTwo) FROM Table GROUP BY ColOne ORDER BY ColOne

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

于 2012-12-02T08:00:57.440 回答
1
select MIN(col2),col1
from dbo.Table_1
group by col1
于 2012-12-02T08:01:33.733 回答