2012-05-21 75 views
4

我花了很多时间阅读,仍然无法找到最佳解决方案。我正在设计Android卡路里计数器应用程序,并使用SQLite。 我有一张表food_logs其中我有2个字段:log_date(NUMBER) , food_id(NUMBER)。我将日期保存为unix时间戳。我想检索一个人在几天前吃过的所有食物。GROUP BY时间戳值范围

例如今天或2012-05-20(昨天)吃的所有食物。我正在搜索GROPBY时间戳,但我无处可去。

或者我只需要保存日期作为字符串(我认为这是不是最好的做法)

+0

什么是“GROPBY时间戳”? – 2012-05-21 20:02:09

回答

5

您可以在UNIX时间戳转换成字符串值,而查询你的表。只要看看SQLite date funcitons

例如,你可以使用下面的代码在您的查询:您的表

SELECT food_id, COUNT(*) FROM food_logs GROUP BY date(log_date, 'unixepoch'); 
+1

感谢您指出我要指出的正确方向。 当我在我的数据库中插入时间戳时,我使用了System.currentTimeMillis(),但SQLite unixepoch需要几秒钟的时间,所以我必须用1000秒来分隔,以秒为单位节省时间并按照您的建议进行转换 – Radoslav

+0

另一件需要注意的事情是:unix时间戳可能以UTC为单位,如果是这样的话,您需要更正该时间戳,或者您可能会包含(例如)前一天晚上到第二天的条目。 – Michael

0

各种时间戳值将有时针,分针的不同值,第二。 SQL的GROUP BY用于收集具有相同值的多个行,因此语法在此处不起作用。如果你只需要一天的值得总结的数据,你可以做这样的事情,假设你有一个表food_info的列food_id和CALORIE_COUNT:

SELECT SUM(calorie_count) 
    FROM food_logs fl INNER JOIN food_info fi ON fi.food_id = fl.food_id 
    WHERE log_date >= '2012-21-05' AND log_date < '2012-21-06' 

您可能需要调整这一点,以适应SQLLite的具体语义。