某字段重复,按时间取出最近的一条数据
基于Oracle:
数据表如下:

期望得到的结果:

建表:
create table AA_WW ( id NUMBER(10), name VARCHAR2(10), creater VARCHAR2(30), creater_time DATE not null, ); insert into AA_WW (id, name, creater, creater_time) values ('1', 'name1','ww', to_date('13-11-2017 09:47:56', 'dd-mm-yyyy hh24:mi:ss')); insert into AA_WW (id, name, creater, creater_time) values ('2', 'name2','ww', to_date('28-11-2017 09:47:56', 'dd-mm-yyyy hh24:mi:ss')); insert into AA_WW (id, name, creater, creater_time) values ('3', 'name3','ee', to_date('24-11-2017 09:47:56', 'dd-mm-yyyy hh24:mi:ss')); insert into AA_WW (id, name, creater, creater_time) values ('4', 'name4','ee', to_date('25-11-2017 09:47:56', 'dd-mm-yyyy hh24:mi:ss')); insert into AA_WW (id, name, creater, creater_time) values ('5', 'name5','ww', to_date('29-11-2017 09:47:56', 'dd-mm-yyyy hh24:mi:ss'));
方案一:
select a.* from AA_WW a inner join ( select b.creater, max(b.creater_time) time from AA_WW b group by b.creater ) c on a.creater = c.creater and a.creater_time = c.time
方案二:(仅限于Oracle)
select temp.* from ( select t.id, t.name, t.creater, t.creater_time, row_number() OVER(PARTITION BY t.creater ORDER BY t.creater_time desc) as row_flg from AA_WW t ) temp where temp.row_flg = '1'
方案三:
select * from AA_WW a where not exists ( select * from AA_WW b where a.creater = b.creater and a.creater_time < b.creater_time )

浙公网安备 33010602011771号