1

在android的mediastore数据库中有一个名为images的表,images表中有一个名为timetaken的列,表示图片的创建时间,单位为毫秒。

现在我有一个需求,我想按创建日期(而不是时间)对图像进行分组,并计算每天的图像,所以我尝试了这个查询:

SELECT datetaken/86400000*86400000 as dateT, count(dateT) as imageSumInDate FROM images WHERE (1 = 1 ) group by (dateT) ORDER BY dateT DESC

不幸的是,它出现了一个错误:

android.database.sqlite.SQLiteException:没有这样的列:dateT(代码 1)

然后我问别人这个问题,他给出了如下子查询样式:

select dateT,COUNT(dateT) as imageSumInDate from (SELECT datetaken/86400000*86400000 as dateT FROM images)t WHERE (1 = 1) group by (dateT) ORDER BY dateT DESC

这可能是正确的,但我不能在 ContentResolver 的查询方法中使用这个子查询。ContentResolver 可能只支持这种风格的查询:

从 ______ 订购的表中选择______

有什么技巧可以帮助我适应 ContentResolver 的查询风格吗?

任何帮助将非常感激!

4

2 回答 2

0

它还通过适合 ContentResolver 的查询样式的技巧来解决:

select dateT,COUNT(dateT) as imageSumInDate from (SELECT datetaken/86400000*86400000 as dateT FROM images where (1=1))t group by (dateT) ORDER BY dateT DESC

于 2013-06-27T06:58:35.273 回答
0

尝试这个:

SELECT datetaken/86400000*86400000 as dateT, count(datetaken) as imageSumInDate FROM images WHERE (1 = 1 ) GROUP BY (datetaken/86400000*86400000) ORDER BY datetaken/86400000*86400000 DESC

问题是列别名在子句dateT范围内无效。ORDER BY简单地重复dateT表达式而不是使用dateT别名应该可以解决问题。

编辑:从查询中删除了对dateT列别名的所有引用。(显然我应该开始做。:)

于 2013-06-27T02:29:40.747 回答