SQLite查询无法使用不同的Android版本

时间:2014-06-29 11:21:44

标签: android sql sqlite sql-order-by union

以下查询适用于 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";

1 个答案:

答案 0 :(得分:0)

我认为 inner ORDER BY中的SELECT子句不能保证外部 SELECT中的顺序(I意味着你不能相信这种行为)。如果出现此类问题,为什么不能在内部查询中为MAX(unix_time)提供别名,然后在外部<{1}}中为别名提供别名/ em>查询?此外,您不必使用ORDER BY,因为DISTINCT已经为您提供了没有重复项的结果集。