MySQL:选择最新的两个匹配字段

时间:2015-04-09 01:49:44

标签: mysql

我需要获得两个字段匹配的最新记录

所以,这个数据..

id |  a   |  b   | date         | label
---------------------------------------
1  |  10  |  15  |  954576000   |  hide
2  |  10  |  15  |  1097650800  |  show
3  |  20  |  25  |  1072252800  |  hide
4  |  20  |  25  |  1113202800  |  show
5  |  35  |  60  |  1027062000  |  show
6  |  39  |  63  |  1012464000  |  show

应该归还......

id |  a   |  b   | date         | label
---------------------------------------
2  |  10  |  15  |  1097650800  |  show
4  |  20  |  25  |  1113202800  |  show
5  |  35  |  60  |  1027062000  |  show
6  |  39  |  63  |  1012464000  |  show

这个查询很简单,如果我只是检查一个字段,效果很好: SELECT * FROM mytable GROUP BY a HAVING MAX(date)

但是,当两个字段匹配时,我一直很难弄清楚如何获取最新记录。

注意:日期是在UNIX时间

1 个答案:

答案 0 :(得分:1)

如果您想要" a"的最新记录,请使用joingroup by

select t.*
from table t join
     (select a, max(date) as maxdate
      from table t
      group by a
     ) tt
     on t.a = tt.a and t.date = tt.maxdate;

having max(date)的语法不起作用。它没有做你的想法,它确实没有意义。

编辑:

如果需要匹配两个字段,请将它们包含在子查询中:

select t.*
from table t join
     (select a, b, max(date) as maxdate
      from table t
      group by a
     ) tt
     on t.a = tt.a and t.b = tt.b and t.date = tt.maxdate;