clickhouse 查询group 分组最大值的一行数据。

按照 sql_finger_md5 分组取query_time_ms 最大的一行数据。

使用any函数可以去匹配到的第一行数据,所以可以先让数据按照query_time_ms 排序,然后再使用group by 和any结合取第一行数据,就是最大值的那一行数据。

bash 复制代码
select
  any (time) as time ,
  any (query_time_ms) as query_time_ms ,
  any (sqltext) as sqltext,
  any (inst_id) as inst_id,
  any (inst_name) as inst_name,
  any (dbname) as dbname,
  any (host_address) as host_address,
  any (lock_times) as lock_times,
  any (parse_row_counts) as parse_row_counts,
  any (return_row_counts) as return_row_counts,
  any (sql_finger) as sql_finger,
  sql_finger_md5,
  any (sqltext_md5) as sqltext_md5
FROM
  (
    SELECT
      inst_id,
      inst_name,
      dbname,
      execution_start_time as time,
      host_address,
      query_time_ms,
      sqltext,
      lock_times,
      parse_row_counts,
      return_row_counts,
      sql_finger,
      sql_finger_md5,
      sqltext_md5
    FROM
      cmdb.rds_all_slow_sql_record_distributed
    WHERE
      (
        execution_start_time >= toDateTime(1711079437) 
        AND execution_start_time <= toDateTime(1711684237) 
      )
      AND (dbname = 'leopard_admin')
      AND host_address  not like '%root%' AND host_address  not like '%bi_user%' AND sqltext  not like '%insert%'
    order by sql_finger_md5 desc,
      query_time_ms desc
  ) a
group by
  a.sql_finger_md5
order by query_time_ms desc
limit
  1000

窗体函数在数据量大的时候性能堪忧,在clickhouse中还有其他的处理方式。比如使用any()、anyLast()函数。

按官方文档的定义:any() "selects the first encountered value.",也就是返回遇到的首个值,看上去是很符合当前的情况。但文档又做了说明:因为查询可能是以任意顺序执行的,并且可能每次执行得顺序都不同(如同我们上面的select * from user_order返回的行顺序不同),所以这个函数的执行结果可能是不确定的。如果要获得确定的值,可以使用"min"或者"max"。或者,select的对象的是一个已经排序过的子查询。

参考资料:

http://www.tracefact.net/tech/112.html

相关推荐
有梦想有行动16 小时前
ClickHouse的Partition和Part概念
linux·数据库·clickhouse
l1t19 小时前
利用DeepSeek辅助翻译clickhouse SQL为DuckDB 格式求解Advent of Code 2025第10题 电子工厂 第二部分
数据库·人工智能·sql·clickhouse·duckdb
l1t20 小时前
对clickhouse给出的二分法求解Advent of Code 2025第10题 电子工厂 第二部分的算法理解
数据库·算法·clickhouse
麦聪聊数据20 小时前
基于SQL+CDC构建MySQL到ClickHouse的实时链路
sql·mysql·clickhouse
lhyzws4 天前
CENTOS上的网络安全工具(三十四) Portainer Kafka-Clickhouse部署(3) 连接kafka和clickhouse
clickhouse·kafka·centos
·云扬·5 天前
3台机器搭建ClickHouse环形复制集群实践
clickhouse
一路向北⁢6 天前
APP企业级业务数据埋点系统(基于 Spring Boot & ClickHouse)
spring boot·后端·clickhouse·统计分析·埋点·pu·vu
温暖小土7 天前
ClickHouse vs Apache Doris:2026年实时OLAP数据库选型深度解析
数据库·数据仓库·clickhouse·apache
海边的椰子树7 天前
非常方便的MySQL迁移数据ClickHouse工具
数据库·mysql·clickhouse·迁移
JZC_xiaozhong7 天前
分析型数据库 ClickHouse 在数据中台中的集成
大数据·数据库·clickhouse·架构·数据一致性·数据孤岛解决方案·数据集成与应用集成