2012-06-16 44 views
7

Tôi có một bảng, myTable có hai trường trong đó IDpatientID. Cùng một bệnh nhânID có thể ở trong bảng nhiều lần với một ID khác. Làm cách nào để đảm bảo rằng tôi chỉ nhận được ONE bản sao của mỗi patientID.?Chọn bản sao đầu tiên của một bản ghi

EDIT: Tôi biết đây không phải là thiết kế hoàn hảo, nhưng tôi cần phải lấy một số thông tin ra khỏi cơ sở dữ liệu và hôm nay và sau đó sửa nó sau.

+0

Có bất kỳ tiêu chí nào để quyết định bản ghi nào cần trả lại hoặc bạn muốn trả lại bất kỳ một cách ngẫu nhiên? –

+0

'đầu 1' chỉ trả về một bản ghi. Tôi cần chính xác một ví dụ của mỗi ID bệnh nhân. Nó không quan trọng mà tblClaims.id là trái ra. – wootscootinboogie

+1

Sau đó, giải pháp sử dụng CTE là cách để đi –

Trả lời

20

Bạn có thể sử dụng một CTE với ROW_NUMBER chức năng:

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

Tôi sẽ upvote câu trả lời này mười lần nếu nó có thể. – AFract

0

Cách đơn giản là thêm LIMIT 1 vào cuối truy vấn của bạn. Điều này sẽ đảm bảo chỉ có một hàng duy nhất được trả về trong tập kết quả.

+1

LIMIT là MySql, phải không? –

+0

có, giới hạn không nằm trong máy chủ sql – wootscootinboogie

+0

đó là 'CHỌN TOP 1 ... 'trong MSSQL –

3

Có vẻ như bạn đang tìm kiếm DISTINCT:

SELECT DISTINCT patientID FROM myTable 

bạn có thể nhận được "hiệu ứng" cùng với GROUP BY:

SELECT patientID FROM myTable GROUP BY patientID 
+0

Không chính xác. ID bệnh nhân có thể hiển thị trong bảng nhiều hơn một lần với một tblclaims.id khác thường. Vì vậy, nếu tôi chọn riêng biệt, điều đó làm cho tôi nhận được rằng bệnh nhânID trả lại nhiều hơn một lần – wootscootinboogie

+0

@wootscootinboogie chỉ khi bạn thêm nhiều trường vào dự đoán bạn đang chọn. 'DISTINCT' chỉ có' ​​BNID' sẽ cho bạn những gì bạn cần. nếu bạn làm 'DISTINCT patiendID, ID' thì có, bạn sẽ nhận được các kết hợp riêng biệt, do đó nhiều hơn một' bệnh nhânID' –

Các vấn đề liên quan