I have the following tables:

> 
> Task (id,....)
> 
> 
> TaskPlan (id, task\_id,.......,end\_at)
> 
> 
> 

Note that end\_at is a timestamp and that one Task has many TaskPlans. I need to query for the MAX `end_at` for each Task.

This query works fine, except when you have the same exact timestamp for different TaskPlans. In that case, I would be returned multiple TaskPlans with the MAX `end_at` for the same Task.

I know this is an unlikely situation, but is there anyway I can limit the number of results for each task\_id to 1?

My current code is:

```
SELECT * FROM Task AS t
INNER JOIN (
SELECT * FROM TaskPlan WHERE end_at in (SELECT MAX(end_at) FROM TaskPlan GROUP BY task_id )
) AS pt 
ON pt.task_id = t.id
WHERE status = 'plan';

```

This works, except in the above situation, how can this be achieved?
Also in the subquery, instad of `SELECT MAX(end_at) FROM TaskPlan GROUP BY task_id`, is it possible to do something like this so I can use TaskPlan.id for the `where in` clause?

```
SELECT id, MAX(end_at) FROM TaskPlan GROUP BY task_id

```

When I try, it gives the following error:

> 
> SQL Error [1055] [42000]: Expression #1 of SELECT list is not in GROUP
>  BY clause and contains nonaggregated column 'TaskPlan.id' which is not
>  functionally dependent on columns in GROUP BY clause; this is
>  incompatible with sql\_mode=only\_full\_group\_by
> 
> 
> 

Any explaination and suggestion would be much welcome!

~~**Note on duplicate label:**~~ *(Now reopened)*

I already studied the [this question](https://stackoverflow.com/questions/7745609/sql-select-only-rows-with-max-value-on-a-column), but it does not provide an answer for my situation where there are multiple max values in the result and it needs to be filtered out to include only one result row per group.