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)
我怎样才能建立一个可以完成一整天的伎俩的请求?谢谢,
让我将“最接近的值”定义为每 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)
| 归档时间: |
|
| 查看次数: |
113 次 |
| 最近记录: |