有一个表,里面每个人有很多条更新数据,要求:取出每个人最后更新的那条。
工号 更新时间
1001 2018-07-01 08:00
1001 2018-07-01 09:01
1001 2018-07-01 10:02
1001 2018-07-01 11:03
1002 2018-06-23 10:00
1002 2018-06-24 09:01
有一个表,里面每个人有很多条更新数据,要求:取出每个人最后更新的那条。
工号 更新时间
1001 2018-07-01 08:00
1001 2018-07-01 09:01
1001 2018-07-01 10:02
1001 2018-07-01 11:03
1002 2018-06-23 10:00
1002 2018-06-24 09:01
问sql以及数据库相关的题,请先说明使用的数据库类型以及数据库版本,因为不同数据库支持的sql写法不一样;
还有,需要提供相关的create table 和insert的sql,因为不同的字段类型处理方式也会不一样。
你这题存在歧义,假设表里只有这两个字段,那么简单的max聚合即可
select 工号,max(更新时间) 最后时间 from 表 group by 工号
但是如果这个表里不止这两个字段,而且要取出完整的行记录时,则需要使用开窗函数。
假设你用的数据库支持开窗函数,那么可以使用row_number()分组倒序排序后取第一条
select b.* from
(
select a.*,
row_number() over(partition by 工号 order by 更新时间 desc) rn
from 表 a
) as b where rn=1