SQL查询不同的值

时间:2010-11-13 07:00:59

标签: sql sql-server tsql distinct

我有一张表格如下

INTERPRO    GOTERM1  GOTERM2   CONFIDENCE

IPR123      1576     2345       1.000
IPR235      3459     4987       1.000
IPR356      9987     5567       1.000
IPR568      3345     3213       0.88
IPR342      7860     7654       0.88 

现在我想要任何具有不同置信度值的记录,仅限于下面的

IPR123   1576    2345   1.000
IPR342   7860    7654    0.88

3 个答案:

答案 0 :(得分:2)

使用Sql Server 2005+,您可以尝试类似

的内容
;WITH Vals AS(
        SELECT  *,
                ROW_NUMBER() OVER (PARTITION BY CONFIDENCE ORDER BY INTERPRO ) RowID
        FROM    YourTable
)
SELECT  *
FROM    Vals
WHERE   RowID = 1

ROW_NUMBER (Transact-SQL)

答案 1 :(得分:0)

SELECT t.INTERPRO, t.GOTERM1, t.GOTERM2, t.CONFIDENCE
FROM   tbl t
WHERE  t.INTERPRO = (SELECT MIN(t2.INTERPRO)
                     FROM   tbl t2
                     WHERE  t.CONFIDENCE = t2.CONFIDENCE)

修改

如果INTERPRO是非独特的,每个自信:

SELECT t2.INTERPRO, t2.GOTERM1, t2.GOTERM2, t1.CONFIDENCE
FROM   (SELECT DISTINCT t3.CONFIDENCE FROM tbl t3) t1,
       (SELECT TOP 1 t4.INTERPRO, t4.GOTERM1, t4.GOTERM2
        FROM   tbl t4
        WHERE  t4.CONFIDENCE = t1.CONFIDENCE) t2

应该可行,但我现在还没有方便的SQL Server实例来仔细检查。

答案 2 :(得分:-1)

如果 INTERPRO 是唯一的

SELECT * FROM TABLE WHERE INTERPRO in 
(
SELECT MIN(INTERPRO) FROM TABLE
GROUP BY CONFIDENCE
)  

你可以用你喜欢的任何东西替换MIN()