gpt4 book ai didi

c# - 基于时间戳计算时间跨度的 SQL 查询

转载 作者:太空狗 更新时间:2023-10-30 00:53:28 28 4
gpt4 key购买 nike

在我的项目中,我需要计算一个时间跨度。目前,我正在检索与我的查询匹配的每个时间戳并将它们存储在 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 到 40 万行数据。这是一个示例:

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 秒或更短。

最佳答案

使用您的示例数据创建一个 sqlfiddle 并且此查询适用于您的示例数据:

SELECT DISTINCT tbl.timestamp FROM main_tbl tbl
INNER JOIN
(
SELECT temp.ID, temp.timestamp FROM main_tbl temp
)test
ON tbl.timestamp <= datetime(test.timestamp, '+10 seconds')
AND tbl.timestamp >= datetime(test.timestamp, '-10 seconds')
AND tbl.ID <> test.ID
ORDER BY tbl.timestamp

http://sqlfiddle.com/#!7/049f5/3

编辑 2:

SELECT
sum(
strftime('%s',
(
SELECT min(temp.timestamp)
FROM main_tbl temp
WHERE temp.timestamp > tbl.timestamp
)
) - strftime('%s',tbl.timestamp)
) as total_sum
FROM main_tbl tbl
WHERE (
strftime('%s',
(
SELECT min(temp.timestamp)
FROM main_tbl temp
WHERE temp.timestamp > tbl.timestamp
)
) - strftime('%s',tbl.timestamp)
) <= 10
AND date = "2013-05-13"
AND col1 = col2

http://sqlfiddle.com/#!7/049f5/55

关于c# - 基于时间戳计算时间跨度的 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16327091/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com