1

ボタンが 1 つしかない単純な Android アプリケーションがあるとします。
そのボタンをクリックして、そのクリックの日時を記録します (sqlite で)。
そのレコードがその日時の長い文字列または文字列を保持するのに最適な形式は何だろうと思います。
目的は、以下を示すレポートを作成すること
です。
2. 日ごとにグループ化された、選択した週に行われたクリックの合計。
3. 週ごとにグループ化された、選択した月に行われたクリックの合計。
4. 選択した年に発生したクリックの合計を月ごとにグループ化。

そのようなデータベースを作成する方法と、そのようなクエリを実行するにはどうすればよいですか?

4

1 に答える 1

11

Unix タイムスタンプ (「エポック」からの秒数) を使用することに投票します。これは、範囲計算に便利で、最も堅牢な日時ライブラリで理解できるためです。

SQLite には、 Unix タイムスタンプを操作するためのヘルパー関数がいくつか用意されています。ここで最も役立つのはstrftime.

strftime('%s', 'now')INSERT で使用して、現在の Unix タイムスタンプを挿入できます。

後で、関心のある特定の時間範囲がわかっている場合は、その範囲の最小タイムスタンプと最大タイムスタンプを計算し、それらの間の行を選択できます。

SELECT * FROM data 
WHERE timestamp >= strftime('%s', '2012-12-25 00:00:00') 
AND timestamp < strftime('%s', '2012-12-25 01:00:00');

または、1 年間のリクエストを月ごとに数えたいとします。

SELECT strftime('%m', timestamp), count(*) FROM Data
WHERE timestamp >= strftime('%s', '2012-01-01 00:00:00') 
AND timestamp < strftime('%s', '2013-01-01 00:00:00') 
GROUP BY strftime('%m', timestamp);

提供される形式オプションを巧みに使用することでstrftime、これらのクエリのほとんどを非常に迅速に解決できる可能性があります。

于 2013-07-23T22:26:33.803 に答える