2012-06-21 49 views
1

我有一個數據庫,有一個表格記錄車輛最後一次燃料。它有一個整數類型的日期列。Android上的SQLite MAX

我需要能夠確定哪個是最後一次加油日期。我使用:

Cursor cursor = db.query(FUEL_USE_TABLE_NAME, LAST_FUEL_UP_DATE_CLAUSE, 
      REGISTRATION_NO_COLUMN + "=? ", new String[]{registrationNumber}, 
      null, null, null); 

其中LAST_FUEL_UP_DATE_CLAUSEMAX(date_time),其中date_time是有問題的列的名稱。

當表中有條目但編寫單元測試時,此工作正常我希望遊標的行數在表中沒有條目時爲零,但是我會得到一個值爲零的單行。即date_time列中的最大值爲零,實際上沒有值。

我很高興爲此編碼(使用0表示沒有記錄而不是-1),但想知道這是預期的行爲還是我做錯了什麼。

回答

1

它似乎是預期的行爲。

見SQLite的文檔here

具體而言,它說:

MAX(X)

的MAX()聚合函數返回該組中的所有值 的最大值。最大值是在同一列的ORDER BY中最後返回 的值。當且僅當組中沒有非NULL值時,聚合max()返回NULL 。

+0

「..將在同一列的ORDER BY中最後返回的值」。推測這隻適用於表中有一些值的情況。在我的情況下,沒有值,所以ORDER BY查詢會返回一個空的遊標,我相信它與MAX返回的零不同。 – barry

+0

這是一個聚合函數..它**總是**返回一個記錄,即使數據庫是空的。在文檔中說得很對:當且僅當組中沒有非NULL值時,Aggregate max()纔會返回NULL。「它是有意義的(sorta),空列的值是」0「。 :p – Barak

+0

好的,謝謝你的幫助。 – barry