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

Làm cách nào để tìm bản ghi trước đó [n-per-group max (timestamp)

Cách tiếp cận cuối cùng với các biến là hợp lý. Bạn cũng có thể thử:

SELECT collect.*,
       (select max(timestamp)
        from data
        where data.channel_id = collect.channel_id AND data.timestamp < collect.timestamp
       ) AS prev_timestamp
FROM data AS collect 
WHERE collect.channel_id = 14 AND collect.timestamp >= 0 
ORDER BY collect.timestamp;

Ngoài ra, hãy tạo chỉ mục trên:collect (channel_id, timestamp).

CHỈNH SỬA:

Sau đây có thể là nhanh nhất:

  select d.*,
         if(@channel_id = channel_id, @prev_timestamp, NULL) as prev_timestamp,
         @channel_id := channel_id, @prev_timestamp = timestamp
  from data d cross join
       (select @channel_id := 0, @prev_timestamp := 0) vars
  where collect.channel_id = 14 AND collect.timestamp >= 0 
  order by channel_id, timestamp;



  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ố biến Null trên mỗi hàng mysql

  2. MySqlCommand Chuẩn bị () không bao giờ đặt IsPrepared thành true

  3. Cập nhật cột dựa trên các giá trị khớp trong bảng khác trong mysql

  4. Làm cách nào để tải emacs sql-mode để sử dụng tệp cấu hình mysql (.my.cnf)?

  5. làm cách nào để nhận được kết quả mysql của ngày hôm nay?