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

編集

私の実際のテーブルにはさらに列が含まれており、それらをすべて選択したいと考えています。行は、最後の列 (例では 2 番目の列) のみが異なります。私は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

2 つ以上の列については、これを提案できます。

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

ランキング関数ROW_NUMBER()を使用して、CTE でこれを行うことができます。特に、これらの 2 つの列以外の列がある場合は、次のような明確な値が得られます。

;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 に答える