当前位置: 首页 > news >正文

Doris使用mysql语法查询时只保留group by分组并order by排序出来的每个分组第一条记录的方法

文章目录

  • Doris使用mysql语法查询时只保留group by分组并order by排序出来的每个分组第一条记录的方法
    • 模拟登录记录表
    • 假设我们要查询每个用户最近登录时间
      • mysql示范
      • doris实现

Doris使用mysql语法查询时只保留group by分组并order by排序出来的每个分组第一条记录的方法

模拟登录记录表

假设有个登录记录表叫 test.t_login_log,同步到doris后表名叫 ods_test_login_log
在这里插入图片描述

假设我们要查询每个用户最近登录时间

mysql示范

不太熟悉group by的同学可能这样写sql

select * from test.t_login_log group by user_id order by create_time  desc

查询结果可以看到,mysql自动帮我们每个分组只保留分组中第一条数据,而排序是等分组、where筛选完了才排序的,并不会对分组排序再取第一条。
在这里插入图片描述
那在MySQL中你需要先按你要排序的字段排序完,再去分组就能得到你想要的了

select * from (select * from test.t_login_log order by create_time desc) as t group by t.user_id 

在这里插入图片描述

doris实现

手动建了个模拟表并写入数据

create table ods_test_login_log(
id int,
user_id int ,
create_time datetime
)
DISTRIBUTED BY HASH(`id`) BUCKETS 1

在这里插入图片描述
第一步先用row_number()函数给记录标上序号

select *,ROW_NUMBER () over(PARTITION by user_id order by create_time desc) as rn from test2.ods_test_login_log 

在标记录行序号的时候可以选择根据字段分区,根据字段排序
在这里插入图片描述
现在只保留每个分组第一条即可!因为前面根据user_id分过组了,每个组内只有一条记录行号为1

select * from (select *,ROW_NUMBER () over(PARTITION by user_id order by create_time desc) as rn from test2.ods_test_login_log) t where rn = 1 

在这里插入图片描述


http://www.mrgr.cn/news/25256.html

相关文章:

  • 2024软件测试经典面试题,收藏!
  • MySQL 高阶语句
  • 数据库基础知识概述与管理操作指南
  • 电力系统保护技术交直流充电桩测试负载
  • 2012-2022年各省新质生产力数据(含原始数据+计算代码+计算结果)
  • 武汉传媒学院联合创龙教仪建设DSP教学实验箱,基于DSP C6000平台搭建
  • 深度防御:反射API在防御跨站脚本攻击中的作用
  • wpf触发与模板的使用示例:批量生产工具
  • 基于PHP的丽江旅游管理系统
  • [Python办公]常用Python数据采集爬虫技术对比
  • 学习之使用IDEA集成GIT
  • TS 常用类型
  • TypeScript 扩展
  • 《AIGC:内容创作与变现的新机遇》
  • 828华为云征文|部署电子书阅读器 Koodo Reader
  • MPU6050移植DMP读出三轴角度
  • RZ7888电机驱动芯片
  • Java线程
  • 先导工业4.0生产线教学平台助力职业智能制造教育教学
  • Java语言程序设计基础篇_编程练习题18.24 (将十六进制数转换为十进制数)