我有各种纬度和经度的商品价格数据。我希望通过比较价格差异和旅行所需的距离来获得更好的价格,从而找到获利机会。 伪编码公式目前看起来像这样:
select (100*diff(avg(price))-50*diff(lon)-70*diff(lat)) as profit
因此,我希望找到数据集中任意两个纬度值之间的差异。我已经看到了解释如何找到连续值之间的差异或日期差异的答案,但似乎没有解决我的特定问题。
使用我当前的查询进行编辑(这应该只是按降序向我提供纬度明智的两个最远的城市): SELECT lat AS lat2,(lat2-lat)AS latdistance,city 从购买INNER JOIN买入(lat2 = lat) 按latdistanceasc排序
输出应列出所涉及的两个城市,因为每个城市都贡献一个纬度,但我不确定如何使它们都显示在输出中。
想象一下3个数据点(价格,纬度,经度): A(10,30,50) B(15,50,60) C(5,20,30)
任意两点之间的纬度距离是多少(为了简单起见)? 输出应为:
AB - 20 AC - 10 BC - 30
答案 0 :(得分:0)
此查询适用于您的条件:
SELECT b1.city start,
b2.city finish,
abs(b1.latitude - b2.latitude) latdistance
FROM buying b1, buying b2
WHERE b1.city < b2.city
ORDER BY 3
但是,您应该收到警告,它价格昂贵且会增加行数O(n^2)
。
要使用更好的距离指标,请使用:
SELECT b1.city start,
b2.city finish,
sqrt(pow(b1.latitude - b2.latitude, 2)
+ pow(b1.longitude - b2.longitude, 2)) latdistance
FROM buying b1, buying b2
WHERE b1.city < b2.city
ORDER BY 3
SQLFiddle处的两个查询。
答案 1 :(得分:-1)
将当前位置与所有其他城市进行比较并显示利润:
SELECT
here.city AS Here,
there.city AS There,
here.price - there.price AS Profit,
ABS(here.lat - there.lat) AS Distance
FROM buying AS here
-- Join to the table itself, but not to the same city
LEFT JOIN buying AS there ON (here.city <> there.city)
-- Remove this to compare all cities to every other city
WHERE here.city = 'Springfield'