首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android机房+窗口功能

Android机房+窗口功能
EN

Stack Overflow用户
提问于 2019-03-08 16:43:45
回答 3查看 1.1K关注 0票数 8

我尝试在Room查询中使用窗口函数。解析器正在抱怨我的查询。我只是尝试在select语句中添加一个"ROW_NUMBER() OVER (ORDER列)“表达式。如果没有此表达式,查询将正确运行。

解析器错误:

代码语言:javascript
复制
extraneous input '(' expecting {<EOF>, ';', ',', K_ALTER, K_ANALYZE, 
K_ATTACH, K_BEGIN, K_COMMIT, K_CREATE, K_DELETE, K_DETACH, K_DROP, 
K_END, K_EXCEPT, K_EXPLAIN, K_FROM, K_GROUP, K_INSERT, K_INTERSECT, 
K_LIMIT, K_ORDER, K_PRAGMA, K_REINDEX, K_RELEASE, K_REPLACE, 
K_ROLLBACK, K_SAVEPOINT, K_SELECT, K_UNION, K_UPDATE, K_VACUUM, 
K_VALUES, K_WHERE, K_WITH, UNEXPECTED_CHAR}
mismatched input ')' expecting {<EOF>, ';', ',', '=', '*', '+', '-', 
'||', '/', '%', '<<', '>>', '&', '|', '<', '<=', '>', '>=', '==', '!=', 
'<>', K_ALTER, K_ANALYZE, K_AND, K_ASC, K_ATTACH, K_BEGIN, K_BETWEEN, 
K_COLLATE, K_COMMIT, K_CREATE, K_DELETE, K_DESC, K_DETACH, K_DROP, 
K_END, K_EXPLAIN, K_GLOB, K_IN, K_INSERT, K_IS, K_ISNULL, K_LIKE, 
K_LIMIT, K_MATCH, K_NOT, K_NOTNULL, K_OR, K_PRAGMA, K_REGEXP, 
K_REINDEX, K_RELEASE, K_REPLACE, K_ROLLBACK, K_SAVEPOINT, K_SELECT, 
K_UPDATE, K_VACUUM, K_VALUES, K_WITH, UNEXPECTED_CHAR}
extraneous input ')' expecting {<EOF>, ';', ',', K_ALTER, K_ANALYZE, 
K_ATTACH, K_BEGIN, K_COMMIT, K_CREATE, K_DELETE, K_DETACH, K_DROP, 
K_END, K_EXPLAIN, K_INSERT, K_LIMIT, K_PRAGMA, K_REINDEX, K_RELEASE, 
K_REPLACE, K_ROLLBACK, K_SAVEPOINT, K_SELECT, K_UPDATE, K_VACUUM, 
K_VALUES, K_WITH, UNEXPECTED_CHAR} extraneous input 'add_permutation' 
expecting {<EOF>, ';', ',', '=', '*', '+', '-', '||', '/', '%', '<<', 
'>>', '&', '|', '<', '<=', '>', '>=', '==', '!=', '<>', K_ALTER, 
K_ANALYZE, K_AND, K_ASC, K_ATTACH, K_BEGIN, K_BETWEEN, K_COLLATE, 
K_COMMIT, K_CREATE, K_DELETE, K_DESC, K_DETACH, K_DROP, K_END, 
K_EXPLAIN, K_GLOB, K_IN, K_INSERT, K_IS, K_ISNULL, K_LIKE, K_LIMIT, 
K_MATCH, K_NOT, K_NOTNULL, K_OR, K_PRAGMA, K_REGEXP, K_REINDEX, 
K_RELEASE, K_REPLACE, K_ROLLBACK, K_SAVEPOINT, K_SELECT, K_UPDATE, 
K_VACUUM, K_VALUES, K_WITH, UNEXPECTED_CHAR}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-03-08 19:37:39

Android将不会使用包含需要SQLite 3.25.0或更高版本的SQLite函数的版本,如下所示:-

窗口功能支持添加到SQLite中,版本为3.25.0 (2018-09-15)。SQLite开发人员使用PostgreSQL窗口函数文档作为窗口函数应如何运行的主要参考。许多测试用例都是针对PostgreSQL运行的,以确保窗口函数在SQLite和PostgreSQL中都以相同的方式运行。窗口函数

最新的Android 28似乎使用了3.19,因为它没有在android.database.sqlite上列出,所以它将使用与API 27相同的。

因此,SQLite将未知子句视为语法错误。

票数 11
EN

Stack Overflow用户

发布于 2020-12-05 11:07:46

事实上,嵌入在Android中的SQLite版本还没有提供窗口功能。但是我想发布一个灵感来自这个问题的解决方案:以平方米计的数字,如果其他人在Android上为这个问题苦苦挣扎的话。

例如,在这方面:

代码语言:javascript
复制
| id | value | updated_at                     |
-----------------------------------------------
| 1  | yes   | 2020-11-26 11:27:45.662 +00:00 |
| 3  | yes   | 2020-11-27 17:19:45.662 +00:00 |
| 4  | yes   | 2020-11-26 11:21:45.662 +00:00 |
| 6  | no    | 2020-11-26 14:42:45.662 +00:00 |
| 9  | yes   | 2020-11-27 15:08:45.662 +00:00 |
-----------------------------------------------

可以使用此查询只获取与行号关联的updated_at列排序的“是”行:

代码语言:javascript
复制
SELECT
    id,
    value,
    (
        SELECT
            count(*)
        FROM
            tbl b
        WHERE
            a.updated_at >= b.updated_at
            AND value = 'yes'
    ) AS row_num,
    updated_at
FROM
    tbl a
WHERE
    value = 'yes'
ORDER BY updated_at

它产生了以下结果:

代码语言:javascript
复制
| id | value | row_num | updated_at                     |
---------------------------------------------------------
|  4 |   yes |   1     | 2020-11-26 11:21:45.662 +00:00 |
|  1 |   yes |   2     | 2020-11-26 11:27:45.662 +00:00 |
|  9 |   yes |   3     | 2020-11-27 15:08:45.662 +00:00 |
|  3 |   yes |   4     | 2020-11-27 17:19:45.662 +00:00 |
---------------------------------------------------------

请注意,窗口函数ROW_NUMBER中通常存在的WHERE a.updated_at >= b.updated_at子句在这里被生成row_num列的子查询的WHERE a.updated_at >= b.updated_at子句替换。此外,您需要在主查询中过滤该子查询的行,否则行号将考虑表的所有行,而不会得到预期的结果。这是查询的AND value = 'yes'部分。

票数 1
EN

Stack Overflow用户

发布于 2020-06-25 15:06:10

这是SQL查询.中的语法错误。

确保在形成查询时,在每一行末尾留出一个空格。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55067466

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档