2013-02-28 25 views
0

嗨,我有一個查詢這個結果集爲X表通過的記錄相比縮小一個結果

1 | JOHN 
2 | JOHN D 
3 | JOHN D. 
4 | JOHN DO 
5 | JOHN DOE 
6 | JOHN DD 
7 | JOHN DOE. 
8 | JOHNY 

我需要縮小這個結果這個巧合我需要爲有效之間設定爲只有一個結果導致最重合的記錄。因此,我認爲正確的算法,這將是這樣的:

  1. 檢查記錄中的第一個單詞的巧合,從左至右(JOHN [七次])
  2. 檢查記錄中的第二個字巧合從左右(DOE [兩次])
  3. 確定 「李四」 是最重複的值,確定
+0

你的例子是錯誤的 - 最重複的值是JOHN DO(三次)。那麼我是對的還是你需要JOHN DOE? – knagaev 2013-03-01 14:09:27

+0

這是正確的knagaev JOHN DO是最重複的價值不是JOHN DOE它是我的錯誤,但想法是一樣的 – 2013-03-02 14:45:32

+0

所以你需要得到JOHN DO作爲例子的結果? – knagaev 2013-03-02 16:31:23

回答

0

這個怎麼樣?

SELECT Name 
FROM tableName 
GROUP BY Name 
HAVING COUNT(*) > 1 
1

那麼,這在計算上是很昂貴的。我會採取的方法是在領域自聯接看到來自各個領域相比,所有其他的重疊:我注意到,你所得到的7計數爲「約翰」,而不是「8

select x.name, count(*) 
from x cross join 
    x x2 
where left(x.name, length(x.name)) = left(x2.name, length(x.name)) 
group by x.name 
order by count(*) desc 

」。我懷疑你不想匹配「Johny」。爲此,我們添加一個附加子句:

select x.name, count(*) 
from x cross join 
    x x2 
where left(x.name, length(x.name)) = left(x2.name, length(x.name)) and 
     (length(x.name = x2.name) or substr(x2.name, length(x.name)+1, 1) = ' ') 
group by x.name 
order by count(*) desc 

爲此,它假定您的數據中有「最短」版本。因此,如果「John」不是數據行,它不會查找「John」。

相關問題