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

Làm cách nào để loại bỏ chỉ các bản sao liên tục mà không phải tất cả các bản sao trong một truy vấn chọn lọc (MySQL)?

Bạn muốn lấy giá trị trước đó. Nếu các ngày thực sự không có khoảng trống hoặc trùng lặp, chỉ cần thực hiện:

select t.*
from t left join
     t tprev
     on t.col1 = date_add(tprev.col1, interval 1 day)
where tprev.col2 is null or tprev.col2 <> t.col2;

CHỈNH SỬA:

Nếu ngày không đáp ứng các điều kiện này, thì bạn có thể sử dụng các biến:

select t.*
from (select t.*,
             (@rn := if(@v = col2, @rn + 1,
                        if(@v := col2, 1, 1)
                       )
             ) as rn
      from t cross join
           (select @v := 0, @rn := 0) params
      order by t.col1
     ) t
where rn = 1;

Lưu ý rằng MySQL không đảm bảo thứ tự đánh giá các biểu thức trong SELECT . Vì vậy, các biến không nên được chỉ định trong một biểu thức và sau đó được sử dụng trong một biểu thức khác - chúng nên được chỉ định trong một biểu thức duy nhất.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sử dụng dấu gạch ngang sau mysql_real_escape_string

  2. gọi tập lệnh bên ngoài với trình kích hoạt mySQL WHITOUT sys_exec trên ubuntu ARMHF

  3. MySQL InnoDB:Sự khác biệt giữa `FOR UPDATE` và` LOCK IN SHARE MODE`

  4. SQL cách trừ kết quả hàng 1 từ hàng 2, hàng 2 từ hàng 3

  5. MySQL RAND () nó có thể được sử dụng bao lâu một lần? nó có sử dụng / dev / random không?