如何从SQL中的一组行构建每日历史记录?

Nic*_*s L 5 sql sqlite datetime

我有一个简单的SQLite表,可以记录整天的能耗.它看起来像这样:

rowid       amrid       timestamp   value     
----------  ----------  ----------  ----------
1           1           1372434068  5720      
2           2           1372434075  0         
3           3           1372434075  90        
4           1           1372434078  5800      
5           2           1372434085  0         
6           3           1372434085  95
Run Code Online (Sandbox Code Playgroud)

我想建立一个简化的最后一天消费历史记录,通过获取每10分钟最接近的值来构建一个类似于以下内容的CSV:

date              value
----------------  ---------- 
2013-07-01 00:00          90
2013-07-01 00:10         100
2013-07-01 00:20         145          
Run Code Online (Sandbox Code Playgroud)

至于现在我有一个请求,允许我获得一个时间戳的最接近的值:

SELECT *
FROM indexes
WHERE amrid=3
ORDER BY ABS(timestamp - strftime('%s','2013-07-01 00:20:00'))
LIMIT 1;
Run Code Online (Sandbox Code Playgroud)

我怎样才能建立一个可以完成一整天的伎俩的请求?谢谢,

Gor*_*off 3

让我将“最接近的值”定义为每 10 分钟间隔开始后的第一个值。您可以将这个想法推广到其他定义,但我认为这是最容易解释这个想法的。

将时间戳转换为“yyyy-mm-dd hhMM”形式的字符串值。该字符串有 15 个字符长。10 分钟间隔是前 14 个字符。因此,使用它作为聚合键,计算min(id)并使用它连接回原始数据。

这个想法是这样的:

select isum.*
from indexes i join
     (select substr(strftime('%Y-%m-%d %H%M', timestamp), 1, 14) as yyyymmddhhm,
             min(id) as whichid
      from indexes
      group by substr(strftime('%Y-%m-%d %H%M', timestamp), 1, 14)
     ) isum
     on i.id = isum.whichid
Run Code Online (Sandbox Code Playgroud)