我有一个sqlite数据库。我有三列:_id,date,value。
我现在想要根据日期中的日期提取_id:s的计数,并计算int值的平均值。这适用于Android应用。
所以我想“选择日期和每天(60天)的日期,计算今天有多少_id:s。最后计算平均值。
我猜它是这样的:
"SELECT DATE('now' 'days[i]') as date, COUNT(_id) as count, AVG(value) as vl FROM v_efforts WHERE DATE(v_efforts.date) = DATE('now' 'days[i]')";
但我无法让'days[i]'
工作。我不知道如何将这个值增加到60,然后我可以如何存储这六十天中每一天的计数和vl。
感谢很多!
答案 0 :(得分:4)
您需要使用GROUP BY表达式按日期汇总条目。目前尚不清楚您是在寻找数据库中最近60天的条目,还是最近60个实际日期的条目(如果您认为每天都有条目,那么这些条目就会相同)。
对于前者(具有数据库条目的最近60天),您可以使用LIMIT子句:
SELECT date,COUNT(_id),AVG(value) FROM v_efforts GROUP BY date ORDER BY date DESC LIMIT 60;
对于后者(过去60个实际日期),您可以使用WHERE:
SELECT date,COUNT(_id),AVG(value) FROM v_efforts WHERE date>DATE('now','-60 days') GROUP BY date ORDER BY date DESC;
答案 1 :(得分:1)
版本3的文档相当不错:
http://www.sqlite.org/lang_datefunc.html
我会看一下处理内置日期时间函数的块。由于SQLite不支持实际日期datetype:
计算当前日期:
选择日期('现在');
计算当月的最后一天:
选择日期('现在','月初','+ 1 月',' - 1天');
计算给定unix时间戳1092941466的日期和时间。
SELECT datetime(1092941466, 'unixepoch');
计算给定unix时间戳1092941466的日期和时间,并补偿您当地的时区。
SELECT datetime(1092941466, 'unixepoch','localtime');
计算当前的unix时间戳。
SELECT strftime('%s','now');
计算自签署美国独立宣言以来的天数。
SELECT julianday('now') - 儒略日( '1776年7月4日');
计算自2004年特定时刻以来的秒数:
SELECT strftime('%s','now') - strftime('%s','2004-01-01 02:34:56');
计算当年10月第一个星期二的日期。
选择日期('现在','年初','+ 9 几个月,'工作日2');
计算自unix时代以来的时间(以秒为单位)(如strftime('%s','now')除了包括小数部分):
SELECT(julianday('now') - 2440587.5)* 86400.0;