SQL:查找多行之间的最长公共字符串

时间:2015-05-21 21:47:13

标签: python sql string amazon-redshift

这个问题是基于我提出的SQL: Find longest common string between rows,但我没有明确解释,所以我会再试一次。 我有桌子t1:

Col1   |   Col2
-------|----------------
 1     | THE APPLE 123
 1     | BEST THE APPLE
 1     | THE APPLE 5/89
 2     | BEST TASTY BANANAS
 2     | BEST TASTY BANANAS 42/7
 2     | THE BEST TASTY BANANAS

我想要t2:

Col1    |  Col2
-----------------------------
 1      |  THE APPLE
 2      | BEST TASTY BANANAS

我的整个表有30,000条记录。我绝不能比较超过21条记录。 Col2是varchar(100)。我正在使用Redshift。我意识到这是一个困难的问题,任何从红移中获取数据并使用某种类似的fuzzystring匹配的方式,比如Python或其他东西?感谢。

1 个答案:

答案 0 :(得分:1)

评论太长了。

在SQL中,您想要执行的处理非常困难。您必须编写自己的聚合函数来处理昂贵且不明显的字符串操作。

你可以在Python中完成这项工作,但它的工作量仍然大致相同。

对于SQL,问题是数据的格式。为了找到最长的匹配子字符串,每个字符或单词确实需要一行。即使有这种表示,也很难,特别是对于长弦。我可以看到一个有用的应用程序是基因组学,字符串编码可能是数十或数十万个字符。

我的建议是考虑如何用Python或Java等语言在算法上解决这个问题。如果你搜索,可能会有一个内置的库来执行此操作。但是,我持怀疑态度。您可能会发现两个字符串的例程,但对于多个字符串,问题则更加困难。