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

标签 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

我想通过每 10 分钟获取最接近的值来构建最后一天的消费的简化历史记录,以构建如下所示的 CSV:

date              value
----------------  ---------- 
2013-07-01 00:00          90
2013-07-01 00:10         100
2013-07-01 00:20         145          

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

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

我如何构建一个请求来获得一整天的时间? 谢谢,

最佳答案

让我将“最接近值”定义为每 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

关于sql - 如何从 SQL 中的一组行构建每日历史记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17408866/

相关文章:

javascript - Highcharts 数据导入 JSON - 格式化

mysql - 选择查询,其中日期列是 X 之前,其中 X 是另一列

java - 为什么我需要 jdbc 和 sqlite java?

android - 如何使用 SqliteDatabse 生成表

python - 从 django timesince 中删除尾随数据 -- 模板等效项

jquery - 可空日期时间、编辑器模板、JQUERY UI DatePicker

mysql - 至少一个 X 但没有 Ys 查询

sql - 选择条件为真且计数 > 3 的总和

sql - 在 MySQL 中为 varchar 选择较大的值有什么坏处吗?

c# - 在 SQLite + BEGIN TRANSACTION 中更新更快