添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

首先来看一下我们的数据长啥样吧,建表SQL戳-> test_max_time.sql

id    create_date                  other_id(要分组的字段)

1    2020-11-20 19:36:19    111
2    2020-11-22 19:36:24    222
3    2020-11-21 19:36:24    111
4    2020-11-21 19:36:24    222
5    2020-11-21 19:36:24    111

首先要了解一个问题,分组后可能会有最大时间相同的多条数据,比如我上面的数据3和5,所以分组取时间最大的记录很可能会出现多条,那么我们要仅取一条的话一定要再加上其他限制才能仅取出一条来

SELECT * FROM test_max_time 
WHERE id in (
SELECT  max(id) as maxId
FROM    test_max_time 
INNER JOIN
	SELECT  other_id as b_other_id, MAX(create_date) max_date
	FROM    test_max_time
	GROUP   BY other_id
ON  other_id = b_other_id AND create_date = max_date
GROUP BY other_id)

方法一首先分组选取最大的时间及分组id,然后再通过INNER JOIN筛选出分组id和时间都为最大的记录,最后用max来取出分组中Id最大并且时间也最大的Id(保证分组后只有一条数据出现),然后再通过id in的方式就好了,结果:

id    create_date                 other_id(要分组的字段)

2    2020-11-22 19:36:24    222
5    2020-11-21 19:36:24    111

SELECT * FROM test_max_time 
WHERE id in (
SELECT  max(id) as maxId
FROM    test_max_time
LEFT JOIN
	SELECT  other_id as b_other_id, MAX(create_date) max_date
	FROM    test_max_time
	GROUP   BY other_id
ON  other_id = b_other_id AND create_date = max_date
GROUP BY other_id, max_date
having max_date is not null)

方法二与方法一的区别在于使用的是LEFT JOIN,并且在第二次分组的时候条件不仅为other_id,还加上了max_date,来排除主表比连接表多出来的字段,例如第四条记录进行左连接后变成了下面的样子,所以还需要使用having对连接表去除不是最大时间的记录

id    create_date                 other_id   max_date

4    2020-11-21 19:36:24    222           null

结果与方法一相同:

id    create_date                 other_id(要分组的字段)

2    2020-11-22 19:36:24    222
5    2020-11-21 19:36:24    111

如果对方法一的INNER JOIN不太熟悉,可以采用方法二的LEFT JOIN的方式来了解为什么需要用INNER JOIN

说明最近没太多好写的ヽ(ー_ー)ノ,来记录一下昨天写的有趣的SQL好了快速开始首先来看一下我们的数据长啥样吧,建表SQL戳->test_max_time.sqlid create_date other_id(要分组的字段)1 2020-11-20 19:36:19 1112 2020-11-22 19:36:24 2223 2020-11-21 19:36:24 1114 2020-11-21 ...
SQL 按类型 分组 ,取 日期 最大 的一条数据 select a.id,a.ORGANIZATION,a.CREATE_TIME,n from (select id,ORGANIZATION,CREATE_TIME,row_number() over(partition by ORGANIZATION order by CREATE_TIME desc) as n from t_pln_annual_target_header) a where n<=1 row_number() over(parti
这里写自定义目录标题my sql 使用group by 分组 后筛选某个值 最大 的一列其他解决方案: my sql 使用group by 分组 后筛选某个值 最大 的一列 今天在my sql 使用group希望group by之后根据某个字段的 最大 值找出那一列,先看下表结构: 需求,根据name1 分组 分组 后查询出oder字段 最大 的那一列 首先由于本人之前使用的是oracle,记忆中group by之前查询的字段必须为g...
WHERE id IN ( SELECT SUBSTRING_INDEX(group_concat( id ORDER BY `storage_time` DESC ), ',', 1 ) 数据库中有如下的数据,想取不同ID对应的 日期 最大 日期 记录 SELECT * FROM My_Table A WHERE A.LEASERENTDETAIL_ID IN( SELECT MAX(B.LEASERENTDETAIL_ID) FROM My_Table B GROUP BY B.LEASECONTRACT_ID ,TO_CHAR(B. --查询 时间 最大 值 select create_by, isnull((select max(create_time) from a_task_carry),'') 最大 时间 , create_time from a_task_carry
select a.* from tb a where not exists(select 1 from tb where name = a.name and val > a.val) name是 分组 字段,val排序字段 my sql 8.0之前没有类似oracle 中的row_number()函数,max min 这种只适用于ID列,或者唯一有序列的情况,所以采用这种方式
写这篇博文是为了帮助遇到同样问题的人,希望对你有用~问题:求怎么查出同一课程id中 时间 最大 记录 ?(如下图所示)1、刚开始想通过group by 分组 课程id, 然后获取 最大 值,如下:SELECT MAX(l.learn_time) FROM learn l where l.user_id = '14201109' GROUP BY l.course_id查出来结果如下:但是我想要查出来所有的字...
FROM ( SELECT *, ROW_NUMBER() OVER (PARTITION BY [分组字段名] ORDER BY [时间字段名] DESC) AS RowIndex FROM [表名] ) temp WHERE temp.RowIndex = 1 SpringBoot使用Undertow做服务器 这个得配置 io线程和工作线程才能发挥出性能。 在K8s下部署Kafka集群 HuEnHao-QiWu: 使用systemd启动Jenkins TTianbo123: 博主的技术面很广哦,厉害👍可以加您微信随时交流吗?非常感谢