【问题标题】:SQLite query not working with different android versionsSQLite 查询不适用于不同的 android 版本
【发布时间】:2014-06-29 11:21:44
【问题描述】:

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

【问题讨论】:

  • 啊,我之前读过,我不需要 DISTINCT 和 UNION。不知道为什么我保留了它。删除 DISTINCT 后,它在两个版本上都可以正常工作。非常感谢。

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


【解决方案1】:

我假设 inner SELECT 中的 ORDER BY 子句不应该保证 outer SELECT 中的顺序(我的意思是你不能相信这种行为)。如果有这样的问题,为什么不能给inner查询中的MAX(unix_time)一个别名,然后outer查询中的ORDER BY别名?另外,您不必使用DISTINCT,因为UNION 已经为您提供了没有重复的结果集。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-24
    • 1970-01-01
    相关资源
    最近更新 更多