比较没有嵌套for循环的行

时间:2013-02-14 07:47:43

标签: sql-server

我在mssql中有一个表,因为我有点新的sql我遇到了一个问题。该表包含以下数据。

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

等等......

我写了一个布尔函数来检查一对long和lats的条件。我还写了一个函数,给出了一对长和拉特之间的距离。我想要做的是添加一个距离最接近当前行的行的列,并且还传递布尔函数并且在时间上彼此足够接近。数据库表包含数百万行,因此我不使用嵌套的for循环,你们如何处理这个大型数据集? mssql有一些聪明的方法吗?

欢迎所有帮助< 3

1 个答案:

答案 0 :(得分:0)

你基本上需要在你的函数中共存100万条记录到100万条其他记录,为你提供1万亿个值。在我看来,SQL实际上不会帮助你管理那么多记录,所以你必须自己做一些工作,而且一次只做一些工作。可能有更好的方法,但我会做以下事情:

  1. 将以下列添加到表格中:calculated destinationdistance
  2. 定期运行算法或添加新记录。此算法只需运行calculated为假的记录。
  3. 算法可以像下面这样工作:

    1. 使用当前记录,循环遍历calculatedtrue的每条记录,并计算到该位置的距离。如果该位置是迄今为止最短的,请设置一个变量以临时存储destinationdistance
    2. 循环结束后,您拥有当前位置的最短destinationdistance。更新数据库中的内容,并将calculated标记设置为true
    3. 现在将此距离与目标记录中的距离进行比较。如果它更短,也要更新该记录。