DBGrid - 如何将两个相邻行中的列值显示为另一列?

时间:2013-04-19 02:16:35

标签: mysql delphi tdbgrid geographic-distance

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

我希望有一个包含4列的数据库网格

  1. 纬度
  2. 经度
  3. 自上次测量以来的距离
  4. 当前已知的街道地址
  5. 4号,我可以尝试从谷歌地图中检索,我得到一个文本或空白,所以让我们忽略它。

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

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

2 个答案:

答案 0 :(得分:5)

你可以这样做:

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

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

第一种选择通常更可取,因为DB在数据集上执行这些操作通常比在代码执行时更有效。 (设置操作显然比行操作更有效。)

答案 1 :(得分: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问题。

How do I lag columns in MySQL?

Calculate delta(difference of current and previous row) in sql

我不能对它们提出任何意见,因为我很少与MySQL合作。