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.