Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 比较没有嵌套for循环的行_Sql Server - Fatal编程技术网

Sql server 比较没有嵌套for循环的行

Sql server 比较没有嵌套for循环的行,sql-server,Sql Server,我在mssql中有一个表,因为我对sql有点陌生,所以遇到了一个问题。该表由以下数据组成 ID | Long | Lat | TimeStamp -----------+--------------+--------------+------------------ 123 | 54 | 18 | 2012-12-02... 143 |

我在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和lat的条件。我还编写了一个函数,它给出了一对long和lat之间的距离。我想做的是添加一个列,该列与行的距离最接近当前行,并且传递布尔函数,并且在时间上彼此足够接近。数据库表由数百万行组成,因此我避免使用嵌套for循环,你们将如何处理这个大型数据集?mssql有一些聪明的方法来实现这一点吗


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

  • 将以下列添加到表中:
    计算的
    目的地
    距离
  • 定期运行算法或添加新记录时运行算法。此算法只需要对
    计算的
    为false的记录运行
  • 该算法的工作原理如下:

  • 使用当前记录,循环遍历每个已计算为
    true
    的记录,并计算到该位置的距离。如果位置是迄今为止最短的,则设置一个变量以临时存储
    目的地
    距离
  • 循环完成后,您将拥有当前位置的最短
    目的地
    距离
    。在数据库中更新该值,并将
    computed
    标志设置为
    true
  • 现在将此距离与目的地记录中的距离进行比较。如果较短,也更新该记录

  • 谢谢你的回复,它帮助我解决了这个问题。我的主要问题是,我在SQL方面做得太差了,这让我很尴尬:然而,在stackoverflow和google的帮助下,一切都是可能的。再次感谢@用户2071101——我的荣幸