以下查询适用于 Android 4.3.1 ,但不适用于 2.3.7 即可。后者的结果按nameA
而不是MAX(unix_time)
排序。看来,ORDER BY
语句完全被忽略了。我假设 2.3.7 附带了较旧的 SQLite 版本,但我的查询无法正常使用。有没有其他方法可以获得预期的结果?
String mQuery = "SELECT DISTINCT nameA FROM (
SELECT nameA, MAX(unix_time) FROM table GROUP BY nameA
UNION
SELECT nameB, MAX(unix_time) FROM table GROUP BY nameB
ORDER BY MAX(unix_time) DESC
) WHERE nameA <> ''";
编辑:根据Notulysses的回答更改了我的查询,现在效果非常好。
String mQuery = "SELECT nameA FROM (
SELECT nameA, MAX(unix_time) AS time FROM table WHERE nameA <> '' GROUP BY nameA
UNION
SELECT nameB, MAX(unix_time) AS time FROM table WHERE nameB <> '' GROUP BY nameB
) ORDER BY time DESC";
答案 0 :(得分:0)
我认为 inner ORDER BY
中的SELECT
子句不能保证外部 SELECT
中的顺序(I意味着你不能相信这种行为)。如果出现此类问题,为什么不能在内部查询中为MAX(unix_time)
提供别名,然后在外部<{1}}中为别名提供别名/ em>查询?此外,您不必使用ORDER BY
,因为DISTINCT
已经为您提供了没有重复项的结果集。