0

我在 mssql 中有一个表,因为我对 sql 有点陌生,所以我遇到了一个问题。该表由以下数据组成。

    ID     |     Long     |     Lat      |     TimeStamp
-----------+--------------+--------------+------------------    
    123    |      54      |     18       |    2012-12-02...       
    143    |      31      |     35       |    2011-09-14...
    322    |      53      |     19       |    2012-11-29...

等等...

我写了一个布尔函数,它检查一对长和纬度的条件。我还编写了一个函数,它给出了一对经纬度之间的距离。我想要做的是添加一个与最接近当前行的行的距离的列,并且还通过布尔函数并且在时间上彼此足够接近。数据库表由几百万行组成,因此我避免使用嵌套的 for 循环,你们将如何处理这个大数据集?mssql 有一些聪明的方法吗?

欢迎所有帮助<3

4

1 回答 1

0

您基本上需要将函数中的 100 万条记录与 100 万条其他记录进行比较,从而为您提供 1 万亿个值。在我看来,SQL 并不能真正帮助您管理那么多记录,因此您必须自己做一些工作,而且一次只能做一些工作。可能有更好的方法,但我会执行以下操作:

  1. 将以下列添加到表中:calculated destination,distance
  2. 定期运行算法或添加新记录。该算法只需要为calculated错误的记录运行。

该算法可以工作如下:

  1. 使用当前记录,遍历具有calculatedas的每个记录true并计算到该位置的距离。如果该位置是迄今为止最短的,则设置一个变量来临时存储destinationand distance
  2. 循环结束后,你有最短的destinationdistance当前的位置。在数据库中更新它并将calculated标志设置为true.
  3. 现在将此距离与目的地记录中的距离进行比较。如果它更短,也更新该记录。
于 2013-02-14T08:10:08.843 回答