使用 Sqlite MAX - 如何 return latest 在少数相等的最大值的情况下

Using Sqlite MAX - how to return latest in case of few equal max values

我有一个 sqlite table,我想在其中 select 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() 会 select 任意其中之一,而我想 select 具有最新日期的那个。 (所以在上面的例子中,结果应该是第 2 行而不是第 1 行,而 Sqlite returns row1)。

可以吗?

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

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