使用Sqlite MAX - 如何在几个相等的最大值的情况下返回最新值

时间:2016-09-26 13:13:34

标签: android sqlite android-sqlite

我有一个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行)。

是否可以这样做?

1 个答案:

答案 0 :(得分:1)

不必计算单列的最大值,而是必须计算两列组合的最大值。只需附加它们的值,并使用printf()确保数字始终具有固定长度,以便对其进行字符串比较:

... MAX(printf('%10d', val1) || date) ...