MySQL - 查找同一列中任意两个整数之间的差异

时间:2013-12-12 08:00:57

标签: mysql

我有各种纬度和经度的商品价格数据。我希望通过比较价格差异和旅行所需的距离来获得更好的价格,从而找到获利机会。 伪编码公式目前看起来像这样:

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

2 个答案:

答案 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'