Tôi đang gặp khó khăn khi thực hiện việc này mà không cần tìm kiếm cùng một bảng ít nhất hai lần để lấy hàng tối đa và sau đó lấy giá trị cho hàng đó. Bảng được đề cập khá lớn nên không thể chấp nhận được.Hàng trả về có giá trị lớn nhất của một cột cho mỗi nhóm
Đây là những gì bàn của tôi có thể trông giống như:
SCORES
ID ROUND SCORE
1 1 3
1 2 6
1 3 2
2 1 10
2 2 12
3 1 6
Tôi cần phải trả lại số điểm mỗi ID có trong vòng gần đây nhất. Đó là, hàng có tối đa (tròn), nhưng không phải là số điểm tối đa.
OUTPUT:
ID ROUND SCORE
1 3 2
2 2 12
3 1 6
Ngay bây giờ tôi có:
SELECT * FROM
(SELECT id, round,
CASE WHEN (MAX(round) OVER (PARTITION BY id)) = round THEN score ELSE NULL END score
FROM
SCORES
where id in (1,2,3)
) scorevals
WHERE
scorevals.round is not null;
này hoạt động, nhưng là khá hiệu quả (tôi phải tự lọc ra tất cả các hàng, khi tôi chỉ có thể không lấy những hàng trong nơi đầu tiên.)
Tôi có thể làm gì để có được các giá trị phù hợp?
tôi thích nó; rất sạch sẽ. – Jeremy