1

假设我们有一个只有一个按钮的简单 Android 应用程序。
单击该按钮记录该单击的日期和时间(在 sqlite 中)。
我想知道该记录的最佳格式是保留很长的日期时间或字符串。
目的是制作显示以下内容的报告:
1. 按小时分组的所选日期的点击总和。
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');

或者,假设您想按月计算一年的请求:

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 回答