2013-12-12 4 views
1

У меня есть данные о ценах на товары в разных широтах и ​​долготах. Я хочу найти возможности для получения прибыли, сравнивая разницу в цене с расстоянием, необходимым для поездок, чтобы получить лучшие цены. pseudocoded формула выглядит следующим образом в настоящее время:MySQL - разница между любыми двумя целыми числами в одном столбце

select (100*diff(avg(price))-50*diff(lon)-70*diff(lat)) as profit 

Таким образом, я хочу, чтобы найти разницу между двумя значениями широты в наборе данных. Я видел ответы, которые объясняют, как найти различия между последовательными значениями или различиями в датах, но ничто, похоже, не касается моего конкретного вопроса.

Редактировать с моим текущим запросом (это должно просто дать мне два самых дальних городов широта мудры в порядке убывания): ВЫБРАТЬ лату LAT2 (LAT2 - лат) AS latdistance, город от покупки INNER JOIN покупки ПО (lat2 = lat) Order by latdistanceasc

Результат должен содержать список обоих городов, поскольку каждый из них вносит вклад в широту, хотя я не уверен, как заставить их отображаться на выходе.

Представьте 3 точек данных с (цена, широта, долгота): А (10, 30, 50) B (15, 50, 60) C (5, 20, 30)

Что такое широтное расстояние между любыми двумя точками (чтобы все было просто)? Вывода должен быть:

AB - 20 AC - 10 BC - 30

+0

Вы должны указать конкретный пример: что у вас есть на входе и что вы ожидаете на выходе. Как было сказано, это может быть так же просто, как 'SELECT abs (lat1-lat2)' – mvp

+0

добавлено редактирование с дополнительной информацией. – user3094386

+0

Ваши правки не казались более ясными: вы должны указать конкретный пример того, что у вас есть и чего вы ожидаете (желательно с числами). Кстати, ваше дистанционное измерение в лучшем случае странно. Даже если бы не было совершенным, я бы использовал «sqrt ((lat1-lat2)^2 + (lon1-lon2)^2)» как метрику для расстояния. – mvp

ответ

-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' 
+0

Этот запрос будет генерировать больше строк вывода, чем было задано. – mvp

+0

Это сделало трюк. Спасибо! – user3094386

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 

Вы должны быть предупреждены, однако, что это дорого и оно будет расти. f строк как 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.

Смежные вопросы