2015-04-09 2 views
0

мне нужно, чтобы получить новые записи, где два поля соответствия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 HAVING MAX (дата)

Но мне было трудно узнать, как получить его, чтобы получить самые новые записи, когда совпадают два поля.

Примечание: дата во время UNIX

+0

Почему бы не просто выбрать 'где метка =«show''? –

ответ

1

Если вы хотите самую последнюю запись для «а», а затем использовать join и group 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) не работает , Он не делает то, что вы думаете, и это действительно не имеет смысла.

EDIT:

Если вам нужно сопрягать два поля, а затем включить их обоих в подзапрос:

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; 
+0

Да, этот JOIN - это то, что мне нужно, однако мне нужно сопоставить a и b. MAX (дата) AND a = b – DrTas

+0

PERFECT! Благодарю Гордона – DrTas