我有一个sqlite表,我想在val1列中选择具有最大值的行。
id val1 val2 date
1 28800 39600 2016-09-23T04:23:26Z
2 28800 28800 2016-09-23T07:27:22Z
使用CursorLoader我得到的解决方案就是:
String[] projection = new String[]{DB.COL_ID,
"MAX(" + DB.COL_VAR1 + ")" + "AS " + DB.COL_VAR1,
"date(" + DB.COL_TIME + ") AS " + DATE_TIME};
String selection = "((" +
DATE_TIME + " >= date('" + from + "')) AND (" + DATE_TIME + " <= date('" + to + "'))" +
"GROUP BY " + DATE_TIME;
return new CursorLoader(context, ContentProvider.createUri(DBSleep.class, null), projection, selection, null, sortOrder);
这种方法很好,除了上面的情况,当我有几行具有相同的最大值时。 Sqlite MAX()将任意选择其中一个,而我想选择具有最新日期的那个。 (因此在上面的例子中,结果应该是第2行而不是第1行,而Sqlite返回第1行)。
是否可以这样做?
答案 0 :(得分:1)
不必计算单列的最大值,而是必须计算两列组合的最大值。只需附加它们的值,并使用printf()确保数字始终具有固定长度,以便对其进行字符串比较:
... MAX(printf('%10d', val1) || date) ...