Android SQLite按小时、天、周、年分组/计数

Android SQLite按小时、天、周、年分组/计数,android,sqlite,android-sqlite,Android,Sqlite,Android Sqlite,假设我们有一个简单的Android应用程序,它只有一个按钮。 单击该按钮,在sqlite中记录单击的日期和时间。 我想知道什么是最好的格式,记录保持一个长或字符串的日期时间。 其目的是制作报告,显示: 1.按小时分组的选定日期的点击总数。 2.按天分组的所选周的点击总数。 3.按周分组的所选月份的点击总数。 4.按月份分组的所选年份的点击总数 如何创建这样的数据库以及如何进行这样的查询?我会投票支持使用Unix时间戳,因为它可以方便地进行范围计算,并且被大多数健壮的日期时间库所理解 用于使用Un

假设我们有一个简单的Android应用程序,它只有一个按钮。 单击该按钮,在sqlite中记录单击的日期和时间。 我想知道什么是最好的格式,记录保持一个长或字符串的日期时间。 其目的是制作报告,显示: 1.按小时分组的选定日期的点击总数。 2.按天分组的所选周的点击总数。 3.按周分组的所选月份的点击总数。 4.按月份分组的所选年份的点击总数


如何创建这样的数据库以及如何进行这样的查询?

我会投票支持使用Unix时间戳,因为它可以方便地进行范围计算,并且被大多数健壮的日期时间库所理解

用于使用Unix时间戳。这里最有用的是strftime

您可以在插入中使用strftime“%s”、“now”插入当前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提供的格式选项,您可能可以非常快速地解决大多数查询。

我赞成使用Unix时间戳(从纪元算起的秒数),因为这些时间戳便于范围计算,并且被大多数健壮的日期时间库所理解

用于使用Unix时间戳。这里最有用的是strftime

您可以在插入中使用strftime“%s”、“now”插入当前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提供的格式选项,您可能可以很快地解决大多数查询