乌柳晴天 2024-07-13 16:59 采纳率: 0%
浏览 13
已结题

数据库一张以时间排好序的表中,找出多次相邻的那些行

比如下面这是二十几行的数据表:ABCSBEKDKBCAKSNSJCBA,其中有ABC BCA CBA出现了三次,也就是他们三总是捆绑着在同一时间出现,那我要怎么去筛选出这三行数据呢

  • 写回答

32条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-07-13 16:59
    关注
    获得0.30元问题酬金

    引自免费微信小程序:皆我百晓生

    为了解决这个问题,我们可以使用MySQL的窗口函数来识别相邻重复的行。具体的方法是通过构建一个窗口来比较相邻行的值,并计算它们的差异。如果差异很小(例如,相邻字符之间的差异不超过一个字符),那么我们可以认为这些行是相邻的重复行。以下是解决这个问题的一种可能的方法:

    假设你的表名为your_table,并且你想要比较的数据列名为data_column。你可以使用以下的SQL查询来找出相邻重复的行:

    SELECT 
        data_column, 
        (CASE 
            WHEN ABS(CHAR_LENGTH(data_column) - CHAR_LENGTH(LAG(data_column) OVER (ORDER BY id))) <= 1 THEN '重复' 
            ELSE '不重复' 
        END) AS is_repeated
    FROM 
        your_table;
    

    这个查询使用了窗口函数LAG()来获取前一行的数据,并使用CHAR_LENGTH()函数计算两个相邻字符串之间的差异。如果这两个字符串的差异很小(在此处设置为长度差不超过1),则它们被视为相邻的重复行。这将返回每一行以及一个标志,指示该行是否与前一行重复。如果你真的只需要出现次数大于一次的重复组合(比如ABC BCA CBA),你可能需要进一步处理这些数据。

    然而,针对您提供的示例字符串"ABCSBEKDKBCAKSNSJCBA",这个查询可能无法直接识别出像"ABC","BCA","CBA"这样的连续重复子串。这是因为这个查询是基于相邻行的比较,而不是针对子串出现的频率。为了解决这个问题,你可能需要使用更复杂的SQL查询或数据库外的脚本处理来实现这一需求。这需要更多的信息来设计一个准确的解决方案。如果这是一个经常出现的问题并且需要自动化处理,可能需要考虑在应用层使用脚本语言来处理这些数据。

    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 7月21日
  • 修改了问题 7月13日
  • 创建了问题 7月13日

悬赏问题

  • ¥15 35114 SVAC视频验签的问题
  • ¥15 impedancepy
  • ¥15 在虚拟机环境下完成以下,要求截图!
  • ¥15 求往届大挑得奖作品(ppt…)
  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图
  • ¥15 UE5.1局部变量对蓝图不可见