2016-12-15 94 views
-1

任何人都可以帮助我在我的开始时间和停止时间之间每隔2分钟从我的SQL Lite表中提取数据 我有两列Data,TimeStamp和我在两个时间戳之间过滤它工作正常,但我想要做的是每隔2分钟产生一次我的数据例如我的开始时间是2016-12-15 10:00:00,停止时间是2016-12-15 10:10 :00结果应该是2016-12-15 10:00:00,2016-12-15 10:02:00,2016-12-15 10:04:00 ....每2分钟提取一次数据SQL精简版

+0

你的问题是广泛的和不清楚的,你应该多解释一下你的问题是什么 – 2016-12-15 11:55:29

+0

另请参阅https://stackoverflow.com/help/how-to-ask – 2016-12-15 11:56:13

+0

我希望我的sql lite表的数据在每2分钟inetrval –

回答

2

添加,给你where子句,表示寻找2分钟的边界:

strftime("%s", TimeStamp) % 120 = 0 

这假定您有精确的2分钟边界的数据。它会忽略这些点之间的数据。

strftime("%s", TimeStamp)将您的时间戳字符串转换为表示自1970年1月1日以来的秒数的单个数字。% 120执行模运算,每120秒产生0。如果你想分钟的界限,使用60如果你想要小时,使用3600

更有趣 - 我已经使用这个 - 就是要把边界之间的所有数据,并一起取它们的平均值:

SELECT CAST(strftime("%s", TimeStamp)/120 AS INTEGER) * 120 as stamp, AVG(Data) 
    FROM table 
    WHERE TimeStamp >= '2016-12-15 10:00:00' AND 
      TimeStamp < '2016-12-15 10:10:00' 
    GROUP BY stamp; 

这在同一个2分钟的“bin”中对所有带时间戳的数据进行平均。第二个日期比较是<而不是<=,因为那么最后一个箱只会平均一个样本,而其他箱将是多个值的平均值。如果您想知道每个容器内的数据更改量,您还可以添加MAX(Data)MIN(Data)列。

+0

3分钟,5分钟等奇数分钟它不会产生正确结果 –

+0

为此,您需要调整公式以“移动”到奇数分钟边界:'CAST(strftime(“%s”,TimeStamp)/ 120 - 60 AS INTEGER)* 120 + 60' – RichN

+0

如果你想每分钟,在我的答案中用'60'代替'120'。 – RichN