前の値を取得したい。日付に実際にギャップや重複がない場合は、次のようにします。
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
の式の評価の順序を保証しないことに注意してください。 。したがって、変数を1つの式に割り当ててから別の式で使用するのではなく、単一の式で割り当てる必要があります。