2012-03-13 16 views
0

のトップ値に基づいてレコードの可変量を返します:与えられコル1の値についてT-SQL:私はテーブルを持っている場合は、列

+------------------------------------------------------------+ 
| Col 1          Col 2 Col 3 | 
+------------------------------------------------------------+ 
| a72195fa-57ca-4849-b423-5595219c8f6b  Val1  1  | 
| a72195fa-57ca-4849-b423-5595219c8f6b  Val2  1  | 
| a72195fa-57ca-4849-b423-5595219c8f6b  Val3  2  | 
| a72195fa-57ca-4849-b423-5595219c8f6b  Val4  3  | 
| 2F6D0B9E-2221-4D18-A64E-ACCFB83EACC7  Val5  2  | 
| 2F6D0B9E-2221-4D18-A64E-ACCFB83EACC7  Val6  2  | 
| 2F6D0B9E-2221-4D18-A64E-ACCFB83EACC7  Val7  3  | 
+------------------------------------------------------------+ 

を、私はCOL3で最も小さい値のすべてのレコードを返さない方法。どこ[Col 1] = a72195fa-57ca-4849-b423-5595219c8f6b意味、私は返すようにしたい:

+------------------------------------------------------------+ 
| Col 1          Col 2 Col 3 | 
+------------------------------------------------------------+ 
| a72195fa-57ca-4849-b423-5595219c8f6b  Val1  1  | 
| a72195fa-57ca-4849-b423-5595219c8f6b  Val2  1  | 
+------------------------------------------------------------+ 

そして[Col 1] = 2F6D0B9E-2221-4D18-A64E-ACCFB83EACC7、私は返すようにしたい:

ここ
+---------------------------------------------------------+ 
| Col 1         Col 2 Col 3 | 
+---------------------------------------------------------+ 
| 2F6D0B9E-2221-4D18-A64E-ACCFB83EACC7 Val5  2  | 
| 2F6D0B9E-2221-4D18-A64E-ACCFB83EACC7 Val6  2  | 
+---------------------------------------------------------+ 

答えて

2
SELECT A.* 
FROM TABLE A, 
(
SELECT Col1,MIN(Col3) AS Col3 
FROM TABLE 
GROUP BY Col1 
) B 
WHERE A.Col3=B.Col3; 
+0

私はこれがそうだと信じています。ありがとうございました! – TamarindoSean

+0

あなたの歓迎された.. .. – Teja

1

は、サブクエリを使用して一つの方法である:

SELECT * 
FROM myTable 
WHERE Col3 = (SELECT MIN(Col3) FROM myTable WHERE Col1 = @SomePassedInGuid) 
AND Col1 = @SomePassedInGuid 
+0

申し訳ありません、それはちょうど偶然のことです、キーとして指導者を含めるように編集します。 – TamarindoSean

+0

@ TamamindoSean - あなたは達成しようとしているものについてのあなたの記述を拡大できますか?それは少し曖昧です(そして、2つの答えが得られる理由は、それらが役に立つほど役に立つとは言えません)。 – Oded

2

少しスマート(私は思う):

SELECT * INTO #TEMP 
FROM 
(
SELECT 'a72195fa-57ca-4849-b423-5595219c8f6b' col1, 'Val1' col2, 1 col3 
UNION SELECT 'a72195fa-57ca-4849-b423-5595219c8f6b' col1, 'Val2' col2, 1 col3 
UNION SELECT 'a72195fa-57ca-4849-b423-5595219c8f6b' col1, 'Val3' col2, 2 col3 
UNION SELECT 'a72195fa-57ca-4849-b423-5595219c8f6b' col1, 'Val4' col2, 3 col3 
UNION SELECT '2F6D0B9E-2221-4D18-A64E-ACCFB83EACC7' col1, 'Val5' col2, 2 col3 
UNION SELECT '2F6D0B9E-2221-4D18-A64E-ACCFB83EACC7' col1, 'Val6' col2, 2 col3 
UNION SELECT '2F6D0B9E-2221-4D18-A64E-ACCFB83EACC7' col1, 'Val7' col2, 3 col3 
) A 

SELECT * FROM #TEMP 

SELECT * 
FROM 
(
SELECT * 
, RANK() OVER(PARTITION BY col1 ORDER BY col3 ASC) _RANK 
FROM #TEMP 
) a 
WHERE a._RANK = 1 
+0

私はウィンドウ関数(ここでは+1)を承認しますが、なぜテンポラリテーブルですか? –

+0

それは概念の証明です(つまり誰でもテストできるようにする)。もちろん、オリジナルの投稿は最初の2つのステートメントをスキップし、3番目のものをテーブル/カラムの名前に合わせます:) –

0

ここでは基本的にLeeが与えたのと同じ質問ですが、少しコンパクトに表現されています。

select top (1) with ties 
    Col1, Col2, Col3 
from T 
order by rank() over (
    partition by Col1 
    order by Col3 
) 
関連する問題