我有一个这样的表:
17年7月1日100年 7月2日100年 3月7日100年17年7月300 17年7月4日300年 7月5日500年 7月5日500年7月7日听500年 7月7日听300年 8月7日听700年17年7月 9日听100 17年7月10日听100
我想输出是(按顺序)通过消除重复的连续但不是全部重复: 100 300 500 300 400 100
我无法选择Distinct,因为它将消除300、100的第二个实例。在MySQL中有没有办法实现此结果?谢谢!
您想要获得先前的值。如果日期确实没有间隔或重复,请执行以下操作:
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。因此,不应在一个表达式中分配变量,而后在另一个表达式中使用变量-应该在单个表达式中分配变量。
SELECT