2016-06-23 38 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