आप पिछला मान प्राप्त करना चाहते हैं। यदि तिथियों में वास्तव में कोई अंतराल या डुप्लीकेट नहीं है, तो बस करें:
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;
संपादित करें:
यदि तिथियां इन शर्तों को पूरा नहीं करती हैं, तो आप चर का उपयोग कर सकते हैं:
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;
ध्यान दें कि MySQL SELECT
. में भावों के मूल्यांकन के क्रम की गारंटी नहीं देता है . इसलिए वैरिएबल को एक एक्सप्रेशन में असाइन नहीं किया जाना चाहिए और फिर दूसरे में इस्तेमाल किया जाना चाहिए -- उन्हें एक ही एक्सप्रेशन में असाइन किया जाना चाहिए।