在我的项目中,我需要计算时间跨度。目前,我正在检索与我的查询匹配的每个 TimeStamp 并将它们存储在List<>
. 然后,我遍历列表以查看是否有任何间隔为 10 秒或更短,然后将它们加在一起。任何大于 10 秒的内容都会被忽略。我想知道是否有一个我可以执行的 SQL 查询来为我执行此操作?我做了一些搜索,但没有找到任何东西。本质上,如果我不需要的话,我不想在内存中存储这么多信息。这是我用来遍历我的方法List<>
:
private static TimeSpan TimeCalculations(IList<DateTime> timeStamps)
{
var interval = new TimeSpan(0, 0, 10);
var totalTime = new TimeSpan();
for (var j = 0; j < timeStamps.Count - 1; j++)
{
if (timeStamps[j + 1].Subtract(timeStamps[j]) > interval) continue;
var timeDifference = timeStamps[j + 1].Subtract(timeStamps[j]);
totalTime = totalTime.Add(timeDifference);
}
return totalTime;
}
当前正在检索的数据可以是 10 到 400k 行的数据。这是一个示例:
2006-09-07 11:46:09
2006-09-07 11:46:19 - 10 seconds
2006-09-07 11:46:20 - 1 second
2006-09-07 11:46:36
2006-09-07 11:47:49
2006-09-07 11:47:53 - 4 seconds
2006-09-07 11:48:02 - 9 seconds
2006-09-07 11:48:15
2006-09-07 11:48:29
2006-09-07 11:48:34 - 5 seconds
2006-09-07 11:54:29
2006-09-07 11:54:39 - 10 seconds
2006-09-07 11:54:49 - 10 seconds
2006-09-07 11:54:59 - 10 seconds
这将导致大约 59 秒。这就是我正在寻找的结果。
我使用的数据库是 SQLite。
编辑
查看答案,我可以说我的问题不够彻底。我当前获取时间戳的查询就足够了。我正在寻找的是一个查询,如果间隔为 10 秒或更短,则将它们之间的差异加在一起。