Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Truy xuất bản ghi không null cuối cùng của mọi cột cho mỗi record_id trong MySQL

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Đếm số lượt truy cập liên tiếp

  2. Lỗi khi tạo hàm được lưu trữ trong MySQL LỖI 1064 &1327

  3. Bao gồm một logic phức tạp trong một Truy vấn MySQL duy nhất

  4. Đảm bảo một mảng PHP chỉ có các khóa tuần tự

  5. Lỗi Golang MySQL - packets.go:33:EOF không mong muốn