假设有一个表
_ _
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
。
谢谢!
答案 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)
答案 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
答案 2 :(得分:1)
SELECT ColOne,Min(ColTwo) 从表 GROUP BY ColOne 通过ColOne订购
PS:不是机器的前面,但请试一试。答案 3 :(得分:1)
select MIN(col2),col1
from dbo.Table_1
group by col1