2012-06-21 5 views
1

차량을 마지막으로 가동했을 때 테이블을 기록하는 데이터베이스가 있습니다. 정수 유형의 날짜 컬럼이 있습니다.안드로이드에서 SQLite MAX

나는 마지막 연료 공급 날짜를 결정할 수 있어야합니다. 내가 사용하고 있습니다 : date_time 문제의 열의 이름입니다 LAST_FUEL_UP_DATE_CLAUSEMAX(date_time)입니다

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

.

테이블에 항목이있을 때 제대로 작동하지만 단위 테스트를 작성하는 동안 테이블에 항목이 없을 때 커서의 행 수가 0이 될 것으로 예상했지만 대신 값이 0 인 단일 행을 얻습니다. 나는. 사실상 값이 없을 때 date_time 열의 최대 값은 0입니다.

내가 (대신 -1의 레코드가 의미 없음 0 사용)이 문제를 해결 코드에 행복 해요,하지만이 동작이 예상되는 경우 알고 싶다, 아니면 내가 뭔가 잘못하고있는 중이 야.

답변

1

예상되는 동작입니다. here

참조 SQLite는 설명서를 구체적으로 말한다 :

최대 (X)

최대() 집계 함수는 그룹의 모든 값 의 최대 값을 반환합니다. 최대 값은 같은 열의 ORDER BY에 마지막으로 이 반환되는 값입니다. 집계 max()는 그룹에 NULL이 아닌 값이없는 경우에만 NULL을 반환합니다.

+0

".. 같은 열의 ORDER BY에서 마지막으로 반환되는 값입니다." 아마도 테이블에 값이있는 경우에만 적용됩니다. 제 경우에는 ORDER BY 쿼리가 빈 커서를 반환하므로 0이 아닌 다른 값이 반환됩니다. MAX()가 반환됩니다. – barry

+0

집계 함수입니다. DB가 비어 있더라도 ** 항상 ** 하나의 레코드를 반환합니다. docs에 이렇게 적혀 있습니다 :'Aggregate max()는 그룹에 NULL이 아닌 값이없는 경우에만 NULL을 반환합니다. '그것은 의미가 있지만 (sorta), 빈 열의 값은 "0"입니다. : p – Barak

+0

도움, 감사합니다. – barry

관련 문제