Tôi sẽ rất cẩn thận với cấu trúc dữ liệu như thế này. Trước tiên, hãy kiểm tra xem tất cả id
s có chính xác một mức giá:
select id
from table t
group by id
having count(distinct price) > 1;
Tôi nghĩ rằng phương pháp an toàn nhất là trích ra một mức giá cụ thể cho mỗi id
(nói mức tối đa) và sau đó thực hiện tổng hợp:
select sum(price)
from (select id, max(price) as price
from table t
group by id
) t;
Sau đó, hãy sửa dữ liệu của bạn để bạn không có thứ nguyên phụ gia lặp lại. Nên có một bảng với một hàng cho mỗi id và giá (hoặc có thể có các bản sao nhưng được kiểm soát bởi ngày có hiệu lực và ngày kết thúc).
Dữ liệu bị lộn xộn; bạn không nên cho rằng giá là như nhau trên tất cả các hàng cho một id nhất định. Bạn cần kiểm tra điều đó mỗi khi bạn sử dụng các trường, cho đến khi bạn sửa dữ liệu.