Cái này có thể giải quyết vấn đề của bạn:
select
record_id,
substring_index(group_concat(Data1 order by Time desc), ',', 1) Data1,
substring_index(group_concat(Data2 order by Time desc), ',', 1) Data2,
substring_index(group_concat(Time order by Time desc), ',', 1) Time
from records
group by record_id
;
Nó có thể không nhanh như những câu trả lời khác, nhưng là một phiên bản khác ... hãy thử xem. Nếu bạn có Data3
trong bảng của bạn, bạn có thể sao chép / dán Data1
và chỉ cần thay đổi tất cả các tham chiếu của cột này thành cột mới.
Chỉ để giải thích cách hoạt động của điều này:group_concat
hàm nối tất cả các giá trị không phải null của một cột bằng dấu phân tách (,
theo mặc định). Bạn có thể sắp xếp thứ tự cột trước khi nối. Nó hoạt động giống như một hàm cửa sổ trong Oracle, Postgre và những người khác ... substring_index
chỉ nhận giá trị được nối đầu tiên, vì danh sách theo thứ tự thời gian giảm dần.