我有一个GPS信息的数据库表(在MS-Access中),其中记录了速度,位置(纬度/经度)和车辆每秒的方位。有一个显示时间的字段2007-09-25 07:59:53。问题是此表已合并来自此项目上收集的多个文件的信息。因此,例如,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#)解决此问题时,如果需要根据更新的DataSet更新20000多条记录,更新表的有效方法是什么?我使用DataAdapter.Update()方法,似乎需要很长时间才能更新表(大约30分钟左右)。
答案 0 :(得分:1)
假设您的评论中包含SQL Server 2008和CTE:
使用SQL的最佳时间通常是在比较或评估大量数据时。
像C#这样的迭代编程语言更适合对单个记录进行更广泛的分析或一次分析一行(* R * ow * B * y * A * gonizing * R * ow)。
For examples of recursive CTEs, see here. 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)