SELECT t.*
FROM (
SELECT DISTINCT groupid
FROM mytable
) mo
CROSS APPLY
(
SELECT TOP 1 *
FROM mytable mi
WHERE mi.groupid = mo.groupid
ORDER BY
age DESC
) t
hoặc cái này:
SELECT *
FROM (
SELECT *, ROW_NUMBER() OVER (PARTITION BY groupid ORDER BY age DESC) rn
FROM mytable
) x
WHERE x.rn = 1
Điều này sẽ trả về nhiều nhất một bản ghi cho mỗi nhóm ngay cả trong trường hợp có mối quan hệ.
Xem bài viết này trong blog của tôi để so sánh hiệu suất của cả hai phương pháp: