如何在一个选择查询中使用“order by”和“count()”

时间:2013-06-27 02:25:57

标签: android count android-contentresolver mediastore

在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的查询风格?

任何帮助都会非常感激!

2 个答案:

答案 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