0

假设我每分钟左右记录一次汽车的纬度和经度,每次都在表格中添加一行。

我想要一个有 4 列的数据库网格

  1. 纬度
  2. 经度
  3. 自上次测量以来的距离
  4. 当前街道地址,如果知道的话

第 4 点,我可以尝试从 Google 地图中检索,但我得到一个文本或空白,所以让我们忽略它。

我如何获得#3?我应该在我的应用程序或 MySql 中计算它(使用存储过程还是只是一个复杂的 SELECT)?

无论哪个答案,有人可以提供一些示例代码或示例链接吗?Google 今天不是我的朋友 :-(

4

2 回答 2

5

你可以这样做:

  • 在您的查询中计算它,并将其显示在计算列中(例如在您显示的位置显示行总计时ITEM_PRICE, QUANTITY, ITEM_PRICE * QUANTITY AS LINE_COST

  • 在应用程序中计算它,使用计算字段(双击 TTable 组件打开字段编辑器,添加字段,将类型设置为 ftCalculated,并在 OnCalcEvent 中为该计算字段编写代码。

第一个选择通常更可取,因为 DB 通常在对数据集执行此类操作时比您的代码按行执行操作更有效。(集合操作显然比行操作更有效。)

于 2013-04-19T03:10:18.333 回答
1

Ken 的回答是尽其所能,因为解决问题的最困难任务是在 SQL 中同时从两行获取数据。如果您使用的是 Oracle 或 SQL Server,则可以使用分析/窗口 LAG 功能。使用 MySQL,您必须自己做。这里有 2 篇关于如何在 MySQL 中模拟 LAG 的文章

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/

另外还有关于如何从前一行获取数据的 StackOverflow 问题。

如何在 MySQL 中滞后列?

在sql中计算delta(当前行和上一行的差)

我不能对其中任何一个提供任何意见,因为我很少使用 MySQL。

于 2013-04-19T11:48:37.477 回答