我有一张这样的桌子:
2017年7月1日100
2017年7月2日100
2017年7月3日300
2017年7月4日300
17年7月5日500
2017年7月6日500
2017年7月7日300
2017年7月8日400
2017年7月9日100
2017年7月10日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中表达式的求值顺序。所以变量不应该在一个表达式中赋值,然后在另一个表达式中使用——它们应该在一个表达式中赋值。

关于mysql - 如何在选择查询(MySQL)中仅消除连续重复项而不消除所有重复项?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45292361/

10-11 17:29
查看更多