选择具有不同值和最大日期的行

wsa*_*ams 4 mysql group-by distinct

我有一个包含三列的MySQL(5.1.49)表.

mysql> create table testme(id int auto_increment, id2 int not null, somedate datetime, primary key(id));
Run Code Online (Sandbox Code Playgroud)

在我的情况下,id2不是唯一的,但我想返回具有不同id2值和max somedate的行.

这是一些示例数据.

mysql> insert into testme values (1, 5, '2012-01-02 01:01:01'),(2, 5, '2012-02-02 02:02:02'),(3, 7, '2010-01-10 11:01:33');
Run Code Online (Sandbox Code Playgroud)

这个问题几乎可以回答我的问题,但是使用额外的id字段,返回的idid2不匹配.对于id2 = 5,它返回id = 1而不是id = 2.

mysql> select id, id2, max(somedate) from testme group by id2;
+----+-----+---------------------+
| id | id2 | max(somedate)       |
+----+-----+---------------------+
|  1 |   5 | 2012-02-02 02:02:02 |
|  3 |   7 | 2010-01-10 11:01:33 |
+----+-----+---------------------+
Run Code Online (Sandbox Code Playgroud)

我期待着,

+----+-----+---------------------+
| id | id2 | max(somedate)       |
+----+-----+---------------------+
|  2 |   5 | 2012-02-02 02:02:02 |
|  3 |   7 | 2010-01-10 11:01:33 |
+----+-----+---------------------+
Run Code Online (Sandbox Code Playgroud)

想要与每个ID2的最大日期匹配的ID

有没有人有任何想法吗?谢谢

its*_*eee 8

这个查询肯定会起作用,虽然它可能不是最佳的:

select t.id, s.id2, s.somedate 
from testme t 
  join 
    ( select id2, max(somedate) as somedate 
      from testme 
      group by id2
    ) s 
    on  s.id2 = t.id2 
    and s.somedate = t.somedate;
Run Code Online (Sandbox Code Playgroud)