Trong MySQL, cách an toàn nhất để thực hiện việc này có thể liên quan đến các biến:
select im.*
from (select im.*,
(@rn := if(@p = platform_type_id, @rn + 1,
if(@p := platform_type_id, 1, 1)
)
) as rn
from main_itemmaster im cross join
(select @rn := 0, @p := '') params
order by platform_type_id, (territory_id = 'US') desc
) im
where rn = 1;
Điều này không liên quan đến việc sử dụng tính năng MySQL (mis) cho phép các cột trong SELECT
của một truy vấn tổng hợp không được tổng hợp và không nằm trong GROUP BY
.
Tại đây là một SQL Fiddle cho thấy nó đang hoạt động.
CHỈNH SỬA:
Về chủ đề của thứ tự đánh giá các biến. Từ tài liệu :
Về mặt kỹ thuật, đoạn mã trên đọc biến trong cùng một câu lệnh , nhưng nó cũng nằm trong cùng một biểu thức . Ngữ nghĩa của if()
(và case
mà đôi khi tôi cũng sử dụng) đảm bảo thứ tự đánh giá các biểu thức.