我有一张表格,名为myTable
,其中有两个字段ID
和patientID
。同一个patientID
可能会在表格中出现多次,但其对应的ID
不同。如何确保我只获取每个patientID
的一个
实例?
编辑:我知道这不是完美的设计,但我需要从数据库中获取一些信息,然后稍后再进行修复。
我有一张表格,名为myTable
,其中有两个字段ID
和patientID
。同一个patientID
可能会在表格中出现多次,但其对应的ID
不同。如何确保我只获取每个patientID
的一个
实例?
编辑:我知道这不是完美的设计,但我需要从数据库中获取一些信息,然后稍后再进行修复。
您可以使用带有ROW_NUMBER
函数的CTE
:
WITH CTE AS(
SELECT myTable.*
, RN = ROW_NUMBER()OVER(PARTITION BY patientID ORDER BY ID)
FROM myTable
)
SELECT * FROM CTE
WHERE RN = 1
select * from ( SELECT myTable.* , RN = ROW_NUMBER()OVER(PARTITION BY patientID ORDER BY ID) FROM myTable ) as myPatient where RN = 1
- Syed您好,看起来您正在寻找 DISTINCT
:
SELECT DISTINCT patientID FROM myTable
GROUP BY
获得相同的“效果”:SELECT patientID FROM myTable GROUP BY patientID
DISTINCT
仅限于 patientID
来获得您需要的内容。如果您使用 DISTINCT patiendID, ID
,那么是的,您将获得不同的组合,因此会有多个 patientID
。 - Pavel Veller简单的方法是在查询语句的末尾添加LIMIT 1
。这将确保结果集中仅返回一行。
TOP 1
不是OP要找的。他想要每个不同patientID的仅一条记录。 - Tim SchmelterROW_NUMBER()
在子查询中设置查询,然后使用生成的行号限制选择。来源:http://blogs.msdn.com/b/sqlserver/archive/2006/10/25/limit-in-sql-server.aspx - Lady Serena KittyWITH CTE AS
(
SELECT tableName.*,ROW_NUMBER() OVER(PARTITION BY patientID ORDER BY patientID) As 'Position' FROM tableName
)
SELECT * FROM CTE
WHERE
Position = 1