You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ClickHouse使用APPLY修饰符结合lambda执行argMax报语法错误如何解决

ClickHouse按主键分组取最新行免逐个写字段解决方案

报错原因

你遇到的->语法报错是因为APPLY搭配Lambda表达式的用法仅在ClickHouse 21.8及更高版本支持,低版本无法识别该语法。

可行解决方案(无需逐个声明100+字段的argMax)

方案1:tuple打包+自动展开(推荐,兼容大部分版本)

利用ClickHouse内置的tuple打包和字段自动映射能力,一次性对所有非分组、非排序字段做argMax聚合:

SELECT
  pk,
  -- 打包除pk、Timestamp外的所有字段,按Timestamp取最大值对应的整行数据后自动展开为原字段
  argMax(tuple(* EXCEPT(pk, `Timestamp`)), `Timestamp`).*
FROM some_table
GROUP BY pk

如果需要同时返回每组最大的Timestamp值,只需要在SELECT列表中新增max(Timestamp) AS max_ts即可。

方案2:动态SQL拼接(兼容所有ClickHouse版本)

如果使用的是特别老旧的ClickHouse版本,可以通过查询系统表动态拼接聚合语句,避免手动写100+字段:

  1. 先执行字段拼接查询,得到聚合字段列表:
SELECT groupArrayConcat(concat('argMax(`', name, '`, `Timestamp`) AS `', name, '`), ', ')
FROM system.columns
WHERE 
  `table` = 'some_table'
  AND `database` = currentDatabase()
  AND `name` NOT IN ('pk', 'Timestamp')
  1. 把上一步查询得到的字符串,替换到下面语句的[聚合字段列表]位置后执行即可:
SELECT pk, [聚合字段列表]
FROM some_table
GROUP BY pk

内容的提问来源于stack exchange,提问作者RChaos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 03:54:05