分割长文件的最好方法.编程或SQL

本文关键字:方法 编程 SQL 文件 分割 | 更新日期: 2023-09-27 18:10:36

我有一个GPS信息的数据库表(在MS-Access中),其中记录了每秒钟车辆的速度,位置(纬度/长度)和方位。有一个字段是这样显示时间的。问题是这个表已经合并了从这个项目中收集的几个文件中的信息。因此,例如,2007-09-25 07:59:53到2007-09-25 08:15:42可以是一个文件,间隔超过10秒后,将启动下一个文件,如2007-09-25 08:15:53到2007-09-25 08:22:12。我需要在这个表中填充一个文件编号字段,每个文件的分离标准是,从上一个和下一个文件的时间间隔超过10秒。我使用c#代码通过迭代表并将每个记录与下一个记录进行比较,并在间隔超过10秒时更改文件编号来做到这一点。

我的问题是,这种类型的问题应该使用编程解决还是使用SQL查询更好地解决?我可以将数据加载到像SQL Server这样的数据库中,所以我可以使用的工具没有限制。我只是想知道最好的方法。

如果使用SQL更好地解决这个问题,我需要使用光标吗?

当使用编程(例如c#)解决这个问题时,当需要基于更新的数据集更新20000多条记录时,更新表的有效方法是什么?我使用了DataAdapter.Update()方法,更新表似乎需要很长时间(30分钟左右)。

分割长文件的最好方法.编程或SQL

根据您的评论假设SQL Server 2008和cte:

使用SQL的最佳时机通常是在比较或评估大型数据集的时候。

像c#这样的迭代编程语言更适合于对单个记录进行更广泛的分析,或者一次分析一行(*R*ow *B*y * a *化*R*ow)。

有关递归cte的示例,请参见此处。MS有很好的参考。

同样,根据数据结构的不同,您可以使用正常的JOIN:

执行此操作。
SELECT <stuff>
FROM MyTable T
INNER JOIN MyTable T2
    ON t2.timefield = DATEADD(minute, -10, t.timefield)
WHERE t2.pk = (SELECT MIN(pk) FROM MyTable WHERE pk > t.pk)