如何从数据库(oracle,mysql)中取出根据ID分组后,时间最大的数据

如何从数据库(oracle,mysql)中取出根据ID分组后,时间最大的数据,第1张

select *  from (select row_number() over(partition by id order by create_tiem desc) rn, id, create_time, ... , ... from table )t1 where rn = 1

在这里...代表的是字段名称,将需要的字段名称放在这里,需要哪些放那些。

SELECT t.*FROM (select * from `table` order by `create_time` desc limit 10000000000) t GROUP BY t.id

在这里就是先将数据进行排序然后再分组,然后取出的是最大的一个值,这里有点要注意,limit 10000000000这个根据不同的版本看是否要加这个,5.5之前的不用加,之后的要加,反正加上肯定没有错。

group by后取的一条数据默认是按主键id排序后的第一条

1、SYSDATE函数:该函数没有参数,返回当前的系统时间。

2、ADD_MONTHS函数:返回日期date加上i个月后的日期值,i可以是任何整数,如果是个小数会被截取整数后参与运算;偌是负数,则返回的是减去i个月后的日期值。

3、NEXT_DAY函数: 返回date日期数据的下一个周几,周几由参数char来决定。

4、LAST_DAY函数:函数返回日期date所在月的最后一天。

5、MONTHS_BETWEEN函数:MONTHS_BETWEEN(date1,date2)计算date1,date2这两个日期值之间隔了多少个月。注意是date1-date2,不是间隔整数月,会得到带小数点的结果。

6、SESSIONTIMEZONE函数: SESSIONTIMEZONE返回当前会话所在的时区,没有参数。

7、EXTRACT函数:EXTRACT从参数datetime中提取参数date指定的数据,比如提取年、月、日,显示当前月份和年等。

第一种使用IN,在IN里面使用子查询查出最大日期,然后再把表的日期和查出的最大日期做等于。

SELECT * FROM TABLE WHERE TRUNC(DATE) = (select max(trunc(date)) from table)

第二种可以使用NOT EXISTS,选择最大日期,那么就是不存在比自身日期大的数据

SELECT * FROM TABLE  T

WHERE NOT EXISTS (SELECT 1 FROM TABLE T1 WHERE TRUNC(T1.DATE) >TRUNC(T.DATE))


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10032417.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-04
下一篇 2023-05-04

发表评论

登录后才能评论

评论列表(0条)

保存