2013-03-18 40 views
8

Tôi muốn sử dụng riêng biệt & hàng đầu trong cùng một thời điểm, tôi đã làmSử dụng DISTINCT và TOP cùng một lúc

SELECT distinct TOP 10 * FROM TableA

nhưng tôi vẫn có một bản sao PersonId vì vậy tôi tought làm:

SELECT distinct (personID) TOP 10 * FROM TableA nhưng cú pháp là sai, vì vậy tôi tự hỏi, nếu có bất kỳ giải pháp

cảm ơn,

+0

Bạn sẽ làm gì nếu bạn chỉ muốn chọn một 'personID' nếu bạn có hàng trùng lặp? –

Trả lời

22

Bạn đang sử dụng một số SELECT * để kéo tất cả các bản ghi. Nếu bạn muốn sử dụng một DISTINCT đúng chỉ liệt kê ra cột bạn muốn nhận các giá trị riêng biệt. Nếu bạn có nhiều cột thì tất cả các cột đó kết hợp tạo nên một bản ghi riêng biệt.

SELECT distinct TOP 10 personID 
FROM TableA 

Điều này sẽ trả lại 10 bản ghi đầu tiên không theo thứ tự cụ thể. Kết quả có thể khác nhau mỗi khi bạn chạy truy vấn.

-1

tôi cố định nó tôi đã làm

select distinct personid from (SELECT TOP 10 * FROM TableA) 
+0

Không có thứ tự theo kết quả có thể thay đổi. Ngay cả một bảng với PK không được đảm bảo để trả lại cùng một thứ tự mà không cần lệnh. – Paparazzi

+0

nếu bạn có cùng một personid trong 10 kết quả hàng đầu thì điều này sẽ không hoạt động, bạn sẽ chỉ nhận được 9 kết quả. Nó đơn giản như 'CHỌN khác biệt TOP 10 personID TỪ TableA' –

0

Bạn dường như muốn 10 hồ sơ ngẫu nhiên cho người khác. Hãy thử điều này:

select t.* 
from (select t.*, 
      row_number() over (partition by personid order by (select NULL)) as seqnum 
     from t 
    ) t 
where seqnum = 1 

Nói chung, tuy nhiên, khi sử dụng top bạn cũng nên sử dụng một order by để xác định những gì bạn có ý nghĩa bởi "top".

1

chọn PersonId khác biệt với mẫu TableA 10

này hoạt động trong Teradata

0

Nó hoạt động đơn giản là nếu bạn sử dụng truy vấn như thế này:

SELECT DISTINCT TOP 2 name FROM [ATTENDANCE] ; 

Trong các truy vấn trên, name là column_name và [ATTENDANCE] là tên_bảng.

Bạn cũng có thể sử dụng WHERE để thực hiện điều kiện lọc.

-1

Nếu mục tiêu là để chọn các bản ghi trên 1 trong tổng số tất cả các PersonId, sau đó sử dụng

select * from TableA group by personid 

Vì bạn đang làm một "nhóm do", nó sẽ trở lại mỗi cột, nhưng sẽ bỏ qua (không hiển thị) bất kỳ hàng bổ sung nào có cùng một ngườiId

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