group by - sql Left Join, max value -
hi every one,
i found similar subjects can't want.
i have got 3 tables:
message(rows: mid, content, sentdate)
received (rows: rid, membre, fk_re_message_id (foreign key: message.id))
group(rows: gid, microid,fk_gr_message_id (foreign key: message.id))
i last message of each group member id based on googling, last request have tried:
select * message msg left join received rcd on msg.mid=rcd.fk_re_message_id left join group grp on msg.mid=grp.fk_gr_message_id inner join (select mid, max( sentdate) lastdate message group mid) message on msg.mid=message.mid (rcd .membre)*
this returning message in groups chosen membre.
please me?
you need fix last join
condition:
select * message msg left join received rcd on msg.mid=rcd.fk_re_message_id left join "group" grp on msg.mid=grp.fk_gr_message_id inner join (select mid, max( sentdate) lastdate message group mid ) message on msg.mid = message.mid , msg.sentdate = message.lastdate (rcd .membre)*;
if filtering data , have index on message(mid, sentdate)
, following should perform better;
select * message msg left join received rcd on msg.mid = rcd.fk_re_message_id left join "group" grp on msg.mid = grp.fk_gr_message_id (rcd .membre)* , not exists (select 1 message m2 m2.mid = msg.mid , m2.sentdate > msg.sentdate );
Comments
Post a Comment