表结构:create table test_tmp(
id int,
log_time datetime,
item varchar(10)
)
create table test_d(
id int,
name varchar(10)
)
测试数据:
insert into test_d values(1, 'hh');
insert into test_d values(2, 'xx');
insert into test_tmp values (1, '2018-08-16 16:13:36', 'a');
insert into test_tmp values (1, '2018-08-16 16:13:36', 'b');
insert into test_tmp values (1, '2017-08-16 16:13:36', 'a');
insert into test_tmp values (1, '2017-08-16 16:13:36', 'b');
insert into test_tmp values (1, '2018-08-16 16:13:36', 'a');
insert into test_tmp values (2, '2018-08-16 16:13:36', 'a');
insert into test_tmp values (2, '2018-08-16 16:13:36', 'b');
insert into test_tmp values (2, '2017-08-16 16:13:36', 'a');
insert into test_tmp values (2, '2017-08-16 16:13:36', 'b');
insert into test_tmp values (2, '2017-08-16 16:13:36', 'c');
我现在这样写只能取到所有的,如何取出每个id最近一条记录(时间)的item(用逗号分隔)?
select * from test_d d left join ( select id, log_time, group_concat(item) from test_tmp group by id, log_time) t on d.id = t.id
咱一步步来,首先,每个test_tmp.id最近的时间嘛,应该这样取的:
其次,根据这个最近的时间,我们再在外面包一层即可:
这样我们就根据最近的时间,找出了哪些记录对应了这个最近的时间,在此基础上group_concat就能找出最近时间的item了。
并且,可以看出上面的sql语句没有与test_d表关联,如果需要test_tmp当中的id必须是test_d表中的id,再join一遍即可,你可以试一下。