在MySQL中查找类似的数据

时间:2013-10-31 08:39:41

标签: mysql similarity

我有天气统计表,例如:

----------------------
| day | temp | falls |
|-----|------|-------|
|  1  |  12  |   30  |
|  2  |  18  |    0  |
|  3  |  13  |   10  |
----------------------

我希望找到最相似的日子:

Today: 14°C, 0mm falls
Most similar day: 3

这有可能只在MySQL中实现吗?

2 个答案:

答案 0 :(得分:1)

我假设“相似”指的是类似的温度和类似的跌倒。

 SELECT day FROM weather ORDER BY ABS(temp - 14) + .2 * ABS(falls - 0) LIMIT 1

虽然ABS(temp - 14) + .2 * ABS(falls - 0)可以调整。听到,跌落的差异(mm)的加权小于temp(C)的差异。

例如,如果我们改为使用ABS(temp - 14) + ABS(falls - 0),则会选择第二天。

答案 1 :(得分:1)

您可以检查两个因素之间的绝对差异,添加它们,并搜索可能的最低值。

但您需要更准确地定义similar

假设温度比跌倒重要两倍,你会给因子2 temp,因子1到falls。然后使用这种查询:

SELECT day 
FROM weather 
ORDER BY (
    2 * ABS(temp - 14) 
  + 1 * ABS(falls - 0)
) ASC
LIMIT 1