select * from tab where anwer_timestamp in (select max(anwer_timestamp) from 
tab where q_id in (select distinct q_id from tab) group by q_id);

That query will be extremely slow if you have lots of data.  This is because 
the construct "in (select...)" is not optimized (until version 5.6).

select t.*
from tab t
join ( select max(answer_timestamp) as ts from tab group by q_id ) x 
on t.answer_timestamp = x.ts
That should almost work.  It fails to do what you want if there are duplicate 
timestamps.

So, you make a second pass, this time taking the max(q_id) from each.  (I'll 
leave that as an exercise for the student.)

> -----Original Message-----
> From: Johan De Meersman [mailto:vegiv...@tuxera.be]
> Sent: Thursday, March 14, 2013 8:29 AM
> To: Ananda Kumar
> Cc: MySQL; Stefan Kuhn
> Subject: Re: Retrieve most recent of multiple rows
> 
> 
> ----- Original Message -----
> > From: "Ananda Kumar" <anan...@gmail.com>
> > Subject: Re: Re: Retrieve most recent of multiple rows
> >
> > select * from tab where anwer_timestamp in (select
> max(anwer_timestamp) from tab where q_id in (select distinct q_id from
> tab) group by q_id);
> 
> This is entirely equivalent to
>         select * from tab where anwer_timestamp in (select
> max(anwer_timestamp) from tab group by q_id);
> 
> Additionally, there are no double timestamps in the dataset you used,
> whereas there are in OP's given dataset.
> 
> It's also fairly hard to provide an accurate solution as long as OP
> hasn't clarified what exactly they want, really.
> 
> 
> 
> 
> --
> Unhappiness is discouraged and will be corrected with kitten pictures.
> 
> --
> MySQL General Mailing List
> For list archives: http://lists.mysql.com/mysql
> To unsubscribe:    http://lists.mysql.com/mysql


-- 
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/mysql

Reply via email to