我有这个疑问,伟大的工作:复杂的查询复制结果(同一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