我有天气统计表,例如:
----------------------
| day | temp | falls |
|-----|------|-------|
| 1 | 12 | 30 |
| 2 | 18 | 0 |
| 3 | 13 | 10 |
----------------------
我希望找到最相似的日子:
Today: 14°C, 0mm falls
Most similar day: 3
这有可能只在MySQL中实现吗?
答案 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