比如下面这是二十几行的数据表:ABCSBEKDKBCAKSNSJCBA,其中有ABC BCA CBA出现了三次,也就是他们三总是捆绑着在同一时间出现,那我要怎么去筛选出这三行数据呢
32条回答 默认 最新
关注 获得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查询或数据库外的脚本处理来实现这一需求。这需要更多的信息来设计一个准确的解决方案。如果这是一个经常出现的问题并且需要自动化处理,可能需要考虑在应用层使用脚本语言来处理这些数据。
解决 无用评论 打赏 举报 编辑记录