首先来看一下我们的数据长啥样吧,建表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做服务器
在K8s下部署Kafka集群
HuEnHao-QiWu:
使用systemd启动Jenkins
TTianbo123: