2011-06-27 58 views
0

我已经得到了邮件存储 这样一个表中的一行: 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+,甲骨文:

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:如果窗的功能提供给你,我肯定会走这条路。请注意,如果绑定在ORDER BY中,则RANK()*可以给多个行赋予相同的值,其中ROW_NUMBER()将随机地将它们排序到不同的位置。 – MatBailie