2013-06-27 78 views
1

在android的mediastore數據庫中有一個名爲images的圖表,圖像表有一個名爲timetaken的列,它表示圖像的創建時間,以毫秒爲單位。如何在一個選擇查詢中使用「order by」和「count()」

現在我有我所創造的一天(無時間)要組圖像的需求,並計算每一天的圖片,所以我嘗試此查詢:

選擇datetaken/86400000 * 86400000爲dateT,計數(dateT)作爲imageSumInDate FROM圖像 WHERE(1 = 1) 組由(dateT) ORDER BY dateT DESC

不幸的是,它涉及了一個錯誤:

android.database.sqlite .SQLiteException:沒有這樣的列:dateT(code 1)

然後我問別人的問題,他給一個子查詢風格像下面這樣:

選擇dateT,COUNT(dateT)作爲imageSumInDate 從(選擇datetaken/86400000 * 86400000爲dateT FROM圖像)噸 WHERE(1 = 1) 組由(dateT) ORDER BY dateT DESC

這可能是正確的,但我不能在ContentResolver的的查詢方法使用這個分查詢。 ContentResolver的可能只支持喜歡這種風格的查詢:

select ____ from table where ______ order by____

有什麼訣竅來幫助我適應ContentResolver的的查詢風格?

任何幫助將非常感謝!

回答

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列別名的引用。 (這顯然我應該做的,開始:)

+0

謝謝您的回答,但它仍然散發出來的同樣的錯誤:沒有這樣的列:dateT,似乎是dateT co如果我刪除「count(dateT)as imageSumInDate」,它將被正確執行 – AvatarQing

+0

啊。問題是'count()'表達式或'group by'子句,然後,而不是(僅)'order by'。我已經更新了我的答案;請嘗試一下。 – sigpwned

+0

我已經嘗試了所有你的三個答案,都出來了同樣的錯誤。如果刪除「count(dateT)as imageSumInDate」,並使用「SELECT datetaken/86400000 * 86400000作爲dateT FROM圖像WHERE(1 = 1)group by(dateT)ORDER BY dateT DESC」,它將正確運行。看起來在帶有別名的「count()」的範圍中存在一些問題。 – AvatarQing

0

它也被一招解決,以適應ContentResolver的的查詢風格:

從選擇 dateT,COUNT(dateT)爲imageSumInDate (SELECT datetaken/86400000 * 86400000作爲dateT 從圖像中,其中(1 = 1))筆 組由(dateT) ORDER BY dateT DESC