查询语句如下:
SELECT asset_id, statistics_year, statistics_month, rent_rate, average_rent FROM dw_asset_operating_summary WHERE rent_rate IS NOT NULL AND average_rent IS NOT NULL AND is_del = toInt8(0) GROUP BY asset_id, statistics_year, statistics_month, rent_rate, average_rent ORDER BY asset_id, statistics_year DESC, statistics_month DESC LIMIT 1 BY asset_id
报错如下:
Caused by: com.alibaba.druid.sql.parser.ParserException: syntax error, error in :' LIMIT 1 BY asset_id) t4 ON t3.asset_id', expect ), actual BY, pos 1630, line 21, column 34, token BY at com.alibaba.druid.sql.parser.SQLParser.printError(SQLParser.java:573) at com.alibaba.druid.sql.parser.SQLParser.accept(SQLParser.java:581) at com.alibaba.druid.sql.parser.SQLSelectParser.parseTableSourceRest(SQLSelectParser.java:1324) at com.alibaba.druid.sql.parser.SQLSelectParser.parseTableSourceRest(SQLSelectParser.java:1189) at com.alibaba.druid.sql.parser.SQLSelectParser.parseTableSource(SQLSelectParser.java:1100) at com.alibaba.druid.sql.parser.SQLSelectParser.parseFrom(SQLSelectParser.java:1002) at com.alibaba.druid.sql.parser.SQLSelectParser.query(SQLSelectParser.java:447) at com.alibaba.druid.sql.parser.SQLSelectParser.query(SQLSelectParser.java:378) at com.alibaba.druid.sql.parser.SQLSelectParser.select(SQLSelectParser.java:61) at com.alibaba.druid.sql.parser.SQLSelectParser.parseTableSource(SQLSelectParser.java:1011) at com.alibaba.druid.sql.parser.SQLSelectParser.parseFrom(SQLSelectParser.java:1002) at com.alibaba.druid.sql.parser.SQLSelectParser.query(SQLSelectParser.java:447) at com.alibaba.druid.sql.parser.SQLSelectParser.query(SQLSelectParser.java:378) at com.alibaba.druid.sql.parser.SQLSelectParser.select(SQLSelectParser.java:61) at com.alibaba.druid.sql.parser.SQLStatementParser.parseSelect(SQLStatementParser.java:4190) at com.alibaba.druid.sql.parser.SQLStatementParser.parseStatementList(SQLStatementParser.java:204) at com.alibaba.druid.sql.parser.SQLStatementParser.parseStatementList(SQLStatementParser.java:124) at com.alibaba.druid.wall.WallProvider.checkInternal(WallProvider.java:630) at com.alibaba.druid.wall.WallProvider.check(WallProvider.java:584) at com.alibaba.druid.wall.WallFilter.checkInternal(WallFilter.java:826) ... 134 common frames omitted
原提问者GitHub用户stone5751
ClickHouse 支持 LIMIT BY 语法,可以在 GROUP BY 子句中使用。这个语法的作用是限制每个分组返回的行数,类似于 SQL 中的 LIMIT 子句。
以下是一个使用 LIMIT BY 语法的示例 SQL 语句:
sql
Copy
SELECT
group_column,
any(non_group_column)
FROM
mytable
GROUP BY
group_column
LIMIT 10 BY group_column
在上面的 SQL 语句中,使用 GROUP BY 子句按 group_column 字段进行分组,并在分组后使用 LIMIT 10 BY group_column 语句限制每个分组返回的行数为 10。同时,使用 ANY 聚合函数来选择任意一行非分组列的值。
问题已修复,请用新版本
https://github.com/alibaba/druid/releases/tag/1.2.6
原回答者GitHub用户wenshao
根据报错信息,可以看出查询语句中存在语法错误。错误的位置在 LIMIT 1 BY asset_id
这一部分。
这是因为 LIMIT BY
子句不是标准SQL的一部分,它可能是特定数据库或工具的扩展。如果你使用的是MySQL,正确的语法应该是 GROUP BY asset_id LIMIT 1
。
所以,尝试将查询语句改为如下形式:
SELECT asset_id, statistics_year, statistics_month, rent_rate, average_rent
FROM dw_asset_operating_summary
WHERE rent_rate IS NOT NULL
AND average_rent IS NOT NULL
AND is_del = toInt8(0)
GROUP BY asset_id, statistics_year, statistics_month, rent_rate, average_rent
ORDER BY asset_id, statistics_year DESC, statistics_month DESC
GROUP BY asset_id
LIMIT 1
请注意,我将 LIMIT BY
替换为了 GROUP BY asset_id LIMIT 1
。再次执行查询语句,应该能够成功运行。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。