2014-03-31 103 views
1

感謝您的閱讀。MySQL從兩個數據庫表獲取最近的條目

我有兩個表。客戶表和註釋表。

用戶可以根據他們選擇的客戶端製作單獨的筆記。每個註釋都是自己獨立的輸入到數據庫中,綁定到一個clientID。

現在我試圖設計一個查詢,它會給我最新的筆記和所有的客戶端信息。

編輯:我很抱歉,我意識到我需要澄清這個聲明,因爲它是模棱兩可的。 我需要在客戶端表中的每個客戶端的最新筆記

現在我可以得到我想要的所有信息,除了我得到的筆記是最早的而不是最新的。所有筆記還有一個noteID,我正在嘗試使用它來獲取最新的筆記。

這是我目前使用的查詢。

SELECT c.clientID, count(c.clientID), c.account_name, c.created_date, c.cert_verified, n.noteID, n.note_date, n.note_body 
FROM clients c, notes n 
WHERE c.clientID = n.clientID AND (SELECT max(n.noteID) from notes n) 
GROUP BY c.clientID ASC 

任何想法將非常感激。我找到了幾個例子,但沒有一個我們非常適用。

謝謝!

+0

'count(c.clientID)'只會在多對一的關係中爲1 - 每個筆記大約有一個客戶端 – meouw

+0

我使用count(c.clientID)來確定每個客戶端有多少筆記記錄。 因此,如果這個表中有10條註釋條目,你的數量將是十等.... –

回答

0

你可以嘗試這樣的:

SELECT c.clientID, count(c.clientID), c.account_name, c.created_date, c.cert_verified, n.noteID, n.note_date, n.note_body 
FROM clients c, notes n 
WHERE c.clientID = n.clientID AND 
    n.noteID in (SELECT max(nm.noteID) from notes nm where nm.clientId = c.clientID) 
GROUP BY c.clientID ASC 

乾杯,

克里斯。

+0

完美!謝謝! –

0

嘗試這樣:

SELECT c.clientID, count(c.clientID), c.account_name, c.created_date, c.cert_verified, n.noteID, n.note_date, n.note_body 
FROM clients c, notes n 
WHERE c.clientID = n.clientID 
    AND n.noteID = (SELECT max(n2.noteID) from notes n2) 
    AND n.note_date = (SELECT max(n2.note_date) FROM notes n2) 
GROUP BY c.clientID ASC 

您的查詢不檢查,以確保noteIDEQUALS從表中最大noteID。此外,您可能會遇到問題,將您子查詢的別名命名爲與外部查詢相同的東西(在您的情況下,這兩個查詢中的notes表的別名爲n)。

+0

我甚至沒有想過外部查詢和內部查詢具有相同的別名。感謝您指出了這一點! –

+0

@ mike-brant在答案的末尾添加單個空格的目的是什麼? – grantmcconnaughey

+0

這與其他答案有相同的問題。它只提供最近的客戶和筆記。我需要所有客戶最近的筆記。 –

相關問題