我有這個疑問,偉大的工作:複雜的查詢複製結果(同一ID,不同列中的值)
SELECT * FROM
(
select
p.id,
comparestrings('marco', pc.value) as similarity
from
unit u, person p
inner join person_field pc ON (p.id = pc.id_person)
inner join field c ON (pc.id_field = c.id AND c.flag_name = true)
where (u.id = 1) AND p.id_unit = u.id
) as subQuery
where
similarity is not null
AND
similarity > 0.35
order by
similarity desc;
讓我說明情況。
TABLES:
person
ID作爲柱。field
表示列,像name, varchar
(類似的東西)person_field
表示人的價值,那場..像這樣的表:unit
不是這個問題
相關
例如:
Person id 1
Field id 1 {name, eg)
value "Marco Noronha"
所以函數「比較字符串」返回從0到1的雙精度值,其中1是精確的('Marco'=='Marco')。
所以,我需要所有人的相似度在0.35以上,我也需要它的相似性。
沒問題,查詢工作正常,因爲它suppost。但現在我有一個新的要求,即表「person_field」將包含一個更改日期,以跟蹤這些行的更改。
例如:
Person ID 1
Field ID 1
Value "Marco Noronha"
Date - 01/25/2013
Person ID 1
Field ID 1
Value "Marco Tulio Jacovine Noronha"
Date - 02/01/2013
所以我需要做的,就是隻考慮最新行! 如果我執行相同的查詢結果將是(例如):
1, 0.8
1, 0.751121
2, 0.51212
3, 0.42454
//other results here, other 'person's
並讓supose,我想帶來的價值是1,0.751121(女巫是DATE整合了最新值)
我覺得我應該這樣做order by date desc limit 1
...
但是,如果我做這樣的事情,查詢將返回只有一個人=/
像:
1, 0.751121
當我真的想:
1, 0.751121
2, 0.51212
3, 0.42454
我做了,已經。有什麼你不明白的嗎? – 2013-02-25 15:46:35