2013-07-01 12 views
5

私は一日中エネルギー消費量を記録するシンプルなSQLiteテーブルを持っています。それは以下のようになります。SQLの行セットから日次履歴を構築するにはどうすればよいですか?

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

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分ごとに最も近い値を取得することにより、最終日の消費の簡素化の歴史を構築したいと思います

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

がどのように私は一日のためにそれを得るためにトリックを行うだろうリクエストを構築することができます。今のよう

は、私は私が1つのタイムスタンプのために最も近い値を取得することができます要求を持っていますか? ありがとう、

答えて

3

10分間隔が始まるたびに最初の値として「最も近い値」を定義しましょう。あなたは他の定義にそのアイデアを一般化することができますが、これはアイデアを説明するのが最も簡単だと思います。

タイムスタンプを "yyyy-mm-dd hhMM"という形式の文字列値に変換します。この文字列は15文字です。 10分間隔が最初の14文字になります。したがって、これを集計キーとして使用して、min(id)を計算し、これを元のデータに戻すために使用します。ここで

はアイデアです:6行目の終わりに向かって

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 
+0

誤植? '... 1,14)'を終わらせるべきか ''? – nurdglaw

+0

多くのおかげで、あなたのアイデアはうまく動作します。これは私の最終的なステートメントです: 'select substr(strftime( '%Y-%m-%d%H:%M'、タイムスタンプ、 'unixepoch')、1,15)インデックスから日付として '0'、 \t値 iが(SUBSTRを選択(のstrftime(yyyymmddhhmとして '%Y%mの%dの%のHの%のM'、タイムスタンプ、 'unixepoch')、1、11)、 分 に参加します(rowid)asインデックスから amrid = 1 と日付(タイムスタンプ、 'unixepoch')= '2013-07-01' substr(strftime( '%Y%m%d%H%M' 、タイムスタンプ、 'unixepoch')、1,11) )isum on i.rowid = isum.whichid; ' –

関連する問題