2016-06-23 37 views
1

的最後一個記錄,我有以下表選擇每個人

tbl_investors

id | first_name | last_name | 
--------------------------------------- 
    1 |  Jon  | Cold  | 
    2 |  Rob  | Ark  | 
    3 |  Rickon | Bolt  | 

tbl_investors_ledger

id | investor_id | amount | 
------------------------------------ 
    1 |  1  | 500 | 
    2 |  2  | 200 | 
    3 |  2  | 250 | 
    4 |  2  | 300 | 
    5 |  3  | 10  | 
    6 |  1  | 550 | 
    7 |  3  | 20  | 

我只是想向所有投資者與他們的最新量恢復。例如,Jon Cold與550,Rob Ark 300和Rickon Bolt 20,他們的姓氏按字母順序排列。

我有一個現有的查詢,但它不會返回最新的投資者數量。有人能幫助我,我做錯了什麼?

SELECT t1.*, t2.* 
    FROM ".tbl_investors." t1 
    LEFT JOIN ".tbl_investors_ledger." t2 
     ON t1.id = t2.investor_id 
    LEFT JOIN (SELECT t.investor_id, max(t.id) as tid 
     FROM ".tbl_investors_ledger." t) tt 
     ON tt.investor_id = t2.investor_id AND tt.tid = t2.id 
    GROUP BY t2.investor_id 
    ORDER BY t1.last_name 

回答

1

試試這個;)

SELECT t1.*, t2.* 
FROM tbl_investors t1 
LEFT JOIN tbl_investors_ledger t2 
ON t1.id = t2.investor_id 
INNER JOIN (
    SELECT t.investor_id, max(t.id) as tid 
    FROM tbl_investors_ledger t GROUP BY t.investor_id) tt 
ON tt.investor_id = t2.investor_id AND tt.tid = t2.id 
ORDER BY t1.last_name 

SQLFiddle DEMO

並檢查相關OP Retrieving the last record in each group和這個博客How to select the first/least/max row per group in SQL,你可以找到你的問題更多的解決方案。

+0

感謝您的及時回覆@ 10086,它的工作!我已經有這個問題將近一天了,我盡我所能不要問。你只需要秒解決它!真棒,再次感謝! – zen

+0

@zen不客氣。而更多的谷歌將會有所幫助。 – Blank

+0

我試過了,我對此很新,無論如何,你真棒! – zen

2

您可以使用GROUP_CONCATSUBSTRING_INDEX一起

SELECT I.* 
    , SUBSTRING_INDEX(GROUP_CONCAT(L.amount ORDER BY L.id DESC), ',', 1) AS LastAmount 
    FROM tbl_investors AS I 
    LEFT JOIN tbl_investors_ledgers AS L 
     ON L.investor_id = I.id 
    GROUP BY I.id 
    ORDER BY I.last_name 

這裏演示從SQLFiddle,非常感謝@zakhefron :)

+0

有一個錯誤:消息:未定義的財產:stdClass :: $金額@KaeL – zen

+0

這沒關係的隊友,你有東西已經工作:) – KaeL

+1

其工作@KaeL。不同的想法。以上查詢演示[SQL小提琴](http://sqlfiddle.com/#!9/32620/5) – zakhefron