2011-06-27 1 views
0

の1行を選択: codMsg、メッセージ、anotherCod私はこのようなメッセージ を格納するテーブル持っている各コード

1, 'hi', 1 
2, 'hello', 1 
3, 'wasup', 1 
4, 'yo', 2 
5, 'yeah', 2 
6, 'gogogo', 3 

各anotherCod

のトップ1を選択することが可能である場合、私は思っていたが

1, 'hi', 1 
4, 'yo', 2 
6, 'gogogo', 3 

私は行全体ではなく、anotherCodの数だけ、そうに動作しないはずでグループをしたい:私は何を期待

答えて

1
select mytable.* 
from mytable 
join (select min(codMsg) as codMsg, anotherCod from mytable group by 2) x  
    on mytable.codMsg = x.codMsg 
0
SELECT 
    * 
FROM 
    myTable 
WHERE 
    codMSG = (SELECT MIN(codMsg) FROM myTable AS lookup WHERE anotherCod = myTable.anotherCod) 
1

SQL Serverの2005+は、Oracle:

SELECT codMsg, 
     message, 
     anotherCod 
FROM 
(
    SELECT codMsg, 
      message, 
      anotherCod, 
      RANK() OVER (PARTITION BY anotherCod ORDER BY codMsg ASC) AS Rank 
    FROM mytable 
) tmp 
WHERE Rank = 1 
+1

1:ウィンドウの機能を使用できる場合、私は間違いなくこのルートを行くと思います。 RANK()*は、ROW_NUMBER()が任意の順序で異なる位置に並べ替えるORDER BYで結ばれていれば、複数の行に同じ値を与えることができます。 – MatBailie

関連する問題