5

一日中エネルギー消費を記録する単純な 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

次のような CSV を作成するために 10 分ごとに最も近い値を取得して、最終日の消費量の単純化された履歴を作成したいと思います。

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

今のところ、1 つのタイムスタンプの最も近い値を取得できるようにするリクエストがあります。

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

一日中それを取得するためのトリックを実行するリクエストを作成するにはどうすればよいですか? ありがとう、

4

1 に答える 1

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
于 2013-07-01T16:21:59.563 に答える