2012-06-21 35 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