在android中的mediastore数据库中有一个名为images的表,images表有一个名为timetaken的列,表示图像的创建时间,以毫秒为单位。
现在我要求我按照创建日期(而不是时间)对图像进行分组,并计算每天的图像,所以我尝试了这个查询:
SELECT datetaken / 86400000 * 86400000 as dateT,count(dateT)as imageSumInDate 从图像 哪里(1 = 1) 分组(dateT) ORDER BY dateT DESC
不幸的是,它出现了错误:
android.database.sqlite.SQLiteException:没有这样的列:dateT(代码1)
然后我问别人这个问题,他给出了如下的子查询样式:
选择dateT,COUNT(dateT)作为imageSumInDate from(SELECT datetaken / 86400000 * 86400000 as dateT FROM images)t 哪里(1 = 1) 分组(dateT) ORDER BY dateT DESC
这可能是正确的,但我无法在ContentResolver的查询方法中使用此子查询。 ContentResolver可能只支持此样式的查询:
select ____ from table where ______ order by____
有没有什么技巧可以帮助我适应ContentResolver的查询风格?
任何帮助都会非常感激!
答案 0 :(得分: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
列别名的所有引用。 (显然我应该开始做。:)
答案 1 :(得分:0)
它也可以通过一个技巧来解决,以适应ContentResolver的查询样式:
选择 dateT,COUNT(dateT)为imageSumInDate from(SELECT datetaken / 86400000 * 86400000 as dateT FROM images where (1 = 1))t 分组(dateT) ORDER BY dateT DESC