我有一个简单的 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/