如何获取mysql中max字段对应的id

如何获取mysql中max字段对应的id,mysql,sql,row,Mysql,Sql,Row,我还是mysql命令的新手,我学会了如何获取列的最大值和列的计数。我的数据库名为db,我的表(名为“foo”)如下所示: +----------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+-------------+------+-----+---------+-------+ | id | va

我还是mysql命令的新手,我学会了如何获取列的最大值和列的计数。我的数据库名为db,我的表(名为“foo”)如下所示:

+----------+-------------+------+-----+---------+-------+
| 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    |       |
+----------+-------------+------+-----+---------+-------+
基本上,我想知道是否有办法获取expires字段的最大日期,然后打印出相应的字段,如user_id和id。到目前为止,这是我当前在命令行中用于从expires获取最大日期的命令

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和用户id


非常感谢您的任何见解

如果您只需要与该(最大)日期对应的
id
user\u id
,那么类似的操作就可以了

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

使用
排序和
限制

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

我认为这是最简单的方法。如果在
foo(expires)
上有一个索引,它也应该有最好的性能。

你是说你想按id计算max expires吗?你需要将max查询作为一个子查询,并将其连接回max value上的原始表,该表对应于计算它的字段;请记住,如果有多行具有最大值,则结果中可能会有多行。@MattCremeens对文章进行了更新。我希望问题更清楚:)@zet我在回答你的编辑时做了一个附录,这确实有助于澄清问题。谢谢。这对我来说非常有效。感谢您提供的清晰而优秀的解决方案!很高兴听到。我很高兴您发现这个解决方案直观易懂。我觉得这很有价值。