2012-06-16 160 views
7

我有一个表,myTable已在它IDpatientID两个领域的第一个实例。同一个patientID可以多次使用不同的ID在表中。我如何确保每个patientID只有ONE实例。?选择一个记录

编辑:我知道这是不是完美的设计,但我需要得到一些信息从数据库和今天再后来修复。

+0

有什么标准来决定要返回的记录或者你想随机返回任何一个? –

+0

'top 1'只返回一条记录。我需要每个患者ID的一个实例。 tblClaims.id被省略并不重要。 – wootscootinboogie

+1

然后使用CTE的解决方案是要走的路 –

回答

20

你可以使用一个CTEROW_NUMBER功能:

WITH CTE AS(
    SELECT myTable.* 
    , RN = ROW_NUMBER()OVER(PARTITION BY patientID ORDER BY ID) 
    FROM myTable 
) 
SELECT * FROM CTE 
WHERE RN = 1 
+3

我会给予好评这个答案,如果十次有可能。 – AFract

0

最简单的方法是添加LIMIT 1到您的查询的末尾。这将确保结果集中只返回一行。

+1

LIMIT是MySql,不是吗? –

+0

是,限制不是在SQL Server – wootscootinboogie

+0

它的'SELECT TOP 1 ...'在MSSQL –

3

这听起来像你正在寻找DISTINCT

SELECT DISTINCT patientID FROM myTable 

,你可以得到相同的 “效应” 与GROUP BY

SELECT patientID FROM myTable GROUP BY patientID 
+0

不完全是。不同的tblclaims.id病人ID可以在表格中出现一次以上。因此,如果我选择不同的,那么只有在您选择的投影中添加更多字段时,我才会得到该patientID返回的不止一次 – wootscootinboogie

+0

@wootscootinboogie。只有'patientID'的DISTINCT'应该给你你需要的东西。如果你这样做'DISTINCT patiendID,ID'然后是,你会得到不同的组合,因此比一个更'patientID' –