2016-08-05 39 views
0

我對mysql命令還是一個新手,我學會了如何獲取列的最大值和列的數量。我的數據庫被命名爲DB和我的表(名爲「foo」)是這樣的:如何獲得mysql中最大字段的相應ID

+----------+-------------+------+-----+---------+-------+ 
| 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和用戶ID。

任何洞察力非常感謝!

+0

你是說你想通過ID最大過期? –

+0

您需要將最大查詢作爲子查詢,並根據計算出的字段將其返回到最大值的原始表;請記住,如果多個行具有最大值,您可能會在結果中獲得多行。 – Uueerdo

+0

@MattCremeens對帖子進行了更新。我希望這個問題更清楚:) – zet

回答

0

如果你只是想在iduser_id對應於(最大)日期,然後這樣的事情應該做

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

這對我來說非常合適。感謝您提供清晰優質的解決方案! – zet

+0

很高興聽到。我很高興你發現這個解決方案直觀易懂。我覺得這是值得的。 –

0

使用order bylimit

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

我認爲這是最簡單的方法。並且在foo(expires)的索引上,它也應該具有最佳性能。