2010-12-13 262 views
1

想象一下你有一張有2列的表格:ID和NAME。 ID只是一個數字,每行增加(如你所期望的)。 NAME是一些隨機的varchar字符串。 NAME對於不同的行可以相同。現在,想象一下你想獲得這個表中最近發生的3次,其中NAME只可能出現一次。MySQL - 是否有可能使用SQL來實現這一點?

舉例來說,如果你有這樣的數據:

ID NAME 
1 HELLO 
2 TEST 
3 HELLO 
4 HELLO 
5 QWERTY 
6 HELLO 

那麼問題的結果應該是:

6 HELLO 
5 QWERTY 
2 TEST 

是否有可能實現這一目標的SQL水平呢?

+0

請將該問題重命名爲類似於「獲取文本的最新出現次數」等類似問題被最小化,並且更容易找到這個解決方案。 – HyderA 2010-12-13 09:48:40

回答

5
SELECT 
    MAX(ID), 
    Name 
FROM 
    table 
GROUP BY 
    Name 
ORDER BY 
    MAX(ID) desc 
LIMIT 3 
3
SELECT MAX(ID), NAME 
FROM THAT_TABLE 
GROUP BY NAME 

參見:GROUP BY (Aggregate) Functions

+0

您需要在其末尾添加「LIMIT 3」。 – AgentConundrum 2010-12-13 09:24:11

+0

我只是重讀這個問題。梅西的答案越來越接近! – 2010-12-13 09:29:56

0

我想,你需要使用 「DISTINCT」 的 「姓名」 一欄:

SELECT DISTINCT name, id FROM table_name ORDER BY id DESC LIMIT 3; 

另一種方式來實現這一目標是使用 「GROUP BY」對於「名稱」(請參閱​​另一個答案)

相關問題