DBGrid - как показать разницу между значением столбца в двух соседних строках в виде другого столбца?

Допустим, я записываю широту и долготу своего автомобиля каждую минуту или около того, каждый раз добавляя строку в таблицу.

Я хочу иметь сетку БД с 4 столбцами

  1. широта
  2. долгота
  3. расстояние с момента последнего измерения
  4. текущий адрес улицы, если известен

Номер 4, я могу попытаться получить данные из Google Maps и получить либо текст, либо пробел, поэтому давайте проигнорируем это.

Как мне получить № 3? Должен ли я рассчитать его в моем приложении или в MySql (используя хранимую процедуру или просто сложный SELECT)?

Какой бы ответ ни был, кто-нибудь может предоставить пример кода или ссылку на пример? Гугл не мой друг сегодня:-(

2 ответа

Решение

Вы можете сделать это любым способом:

  • Вычислите его в своем запросе и отобразите в вычисляемом столбце (например, при отображении итоговых значений строк, где вы отображаете ITEM_PRICE, QUANTITY, ITEM_PRICE * QUANTITY AS LINE_COST,

  • Вычислите его в своем приложении, используя вычисляемое поле (дважды щелкните компонент TTable, чтобы открыть редактор полей, добавить поле, задать тип для ftCalculated и записать код в OnCalcEvent для этого вычисляемого поля.

Первый выбор обычно предпочтительнее, потому что БД, как правило, более эффективно выполняет подобные действия над наборами данных, чем когда ваш код делает это построчно. (Операции над множествами, очевидно, более эффективны, чем операции со строками.)

Ответ Кена далеко зашел, потому что самая трудная задача решения вашей проблемы - получение данных из двух строк одновременно в SQL. Если бы вы использовали Oracle или SQL Server, вы могли бы использовать аналитическую / оконную функцию LAG. С MySQL вы должны сделать это самостоятельно. Вот 2 статьи о том, как моделировать LAG в MySQL

http://www.onlamp.com/pub/a/mysql/2007/03/29/emulating-analytic-aka-ranking-functions-with-mysql.html?page=1

http://explainextended.com/2009/03/12/analytic-functions-optimizing-lag-lead-first_value-last_value/

Кроме того, есть вопросы Stackru о том, как получить данные из предыдущего ряда.

Как я могу отставать столбцы в MySQL?

Рассчитать дельту (разницу текущей и предыдущей строки) в sql

Я не могу высказать свое мнение по любому из них, потому что я редко работаю с MySQL.

Другие вопросы по тегам