当前位置: 首页 > 面试题库 >

如何在选择查询(MySQL)中仅消除连续重复项而不消除所有重复项?

彭朝
2023-03-14
问题内容

我有一个这样的表:

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。因此,不应在一个表达式中分配变量,而后在另一个表达式中使用变量-应该在单个表达式中分配变量。



 类似资料:
  • 我想从字符串中消除连续重复,如 这是我的密码 我得到了错误非穷举模式,我想这是第二行的错误,当只剩下1个字符时,程序不知道如何处理。我该怎么修?

  • 请注意,在转向您之前,我已经浏览了各种帖子。事实上,我尝试实现中提供的解决方案:基于“notin”条件从数据帧中删除行 我的问题如下。让我们假设我有一个巨大的数据帧,我想删除重复的数据帧。我很清楚我可以使用drop_duplicates,因为这是最快的最简单的方法。然而,我们的老师希望我们创建一个包含重复项ID的列表,然后根据这些值是否包含在上述列表中删除它们。 现在,让我们看看输出: 因此,我得

  • 问题内容: 这可能很简单,这是我的查询: 但这只会删除具有相同u.name和p.pic_id的行中的重复项。我想要这样,如果名称有任何重复,则只剩下其他行。这是一个奇怪的查询,但是总的来说,我如何将不重复项应用于SELECT子句的单个列? 问题答案: 任意选择保留最小的PIC_ID。另外,请避免使用隐式连接语法。

  • 问题内容: 这个问题已经在这里有了答案 : 在MySQL中删除重复的行 (25个答案) 3个月前关闭。 如何从MySQL表中删除所有重复数据? 例如,具有以下数据: 我会使用,如果它是一个查询。 我该怎么做才能只删除重复项并仅保留每个记录一个? 问题答案: 编辑者警告:此解决方案的计算效率低下,可能会降低大型表的连接。 注意:您 需要 首先在表的 测试副本 上执行此操作! 完成此操作后,我发现,除

  • 问题内容: 我有这样的桌子 我想执行一个查询,以除去所有最新的重复项。我希望你有个主意吗? 例如,查询后的表必须是这样的 问题答案: 语法可能需要调整,但是应该做到这一点。此外,您可能希望将子查询预查询到其自己的表FIRST中,然后对该结果集运行DELETE FROM。

  • 问题内容: 添加它是否包含此值之前,如何检查我的json … 问题答案: 明显的方式 最明显的方法是使用循环并遍历数组中的所有项目,并在每次想知道是否已经有特定项目时进行比较。琐碎但乏味,尤其是当您要进行很多比较时。 每当您要搜索现有对象时: 聪明的方式 此代码使用Javascript的功能,其原型可在某种关联的内存存储中用作数组。假设您的JSON项目位于变量中。定义您的比较键(例如,名字和姓氏)