2016-08-05 2 views
0

Я по-прежнему новичок в командах mysql, и я узнал, как получить максимальное значение столбца и количество столбцов. Моя база данных называется дб и мой стол (с именем «Foo») выглядит следующим образом:Как получить соответствующий идентификатор максимального поля в mysql

+----------+-------------+------+-----+---------+-------+ 
| Field | Type  | Null | Key | Default | Extra | 
+----------+-------------+------+-----+---------+-------+ 
| id  | varchar(64) | NO | PRI | NULL |  | 
| expires | datetime | YES | MUL | NULL |  | 
| extra | text  | YES |  | NULL |  | 
| valid | tinyint(1) | NO |  | NULL |  | 
| trust_id | varchar(64) | YES | MUL | NULL |  | 
| user_id | varchar(64) | YES | MUL | NULL |  | 
+----------+-------------+------+-----+---------+-------+ 

В принципе, я хочу знать, если есть способ, чтобы получить максимальную дату поле истекает, а затем распечатать соответствующие поля, такие как user_id и id. До сих пор это команда, которую я в настоящее время используют, чтобы получить максимальную дату от истекает в командной строке

mysql -u root db -e "select max(id) from foo;" 

только это даст мне:

+---------------------+ 
| max(expires)  | 
+---------------------+ 
| 2016-08-05 17:54:44 | 
+---------------------+ 

То, что я хотел бы сделать, это получить это обратно :

+---------------------+--------+--------+ 
| max(expires)  | id  | user_id| 
+---------------------+--------+--------+ 
| 2016-08-05 17:54:44 |cd97eb4 | 2bf2cec| 
+---------------------+--------+--------+ 

Итак, у меня будет максимальная дата истечения срока действия вместе с id и идентификатором пользователя для этой даты истечения срока действия.

Любое понимание очень ценится!

+0

Вы хотите сказать, что вам нужно, чтобы max истекал по id? –

+0

Вам нужно сделать запрос max в подзапрос и вставить его обратно в исходную таблицу по максимальному значению в поле, из которого оно было рассчитано; имея в виду, вы можете получить несколько строк в результатах, если более одной строки было максимальное значение. – Uueerdo

+0

@MattCremeens сделал обновление к сообщению. Я надеюсь, что вопрос более ясный :) – zet

ответ

0

Если вы просто хотите id и user_id, соответствующий этому (максимум) дату, а затем что-то вроде этого нужно сделать

select expires, id, user_id 
from foo 
where expires in 
    (select max(expires) 
    from foo) 
+0

Это отлично сработало для меня. Спасибо за четкое и отличное решение! – zet

+0

Приятно слышать. Я рад, что вы нашли это решение интуитивно понятным и понятным. Я чувствую, что это того стоит. –

0

Использование order by и limit:

select f.* 
from foo f 
order by f.expires desc 
limit 1; 

Я думаю, что это простейшим способом. И с индексом на foo(expires), он должен также иметь лучшую производительность.

Смежные вопросы