簡體   English   中英

mysql內部聯接3表從最大日期獲取最后一條記錄

[英]mysql inner join 3 tables get last record from max date

我有3個表,我想加入這些表,但是除了要對某些列求和之外,我還需要顯示數據庫中的每個user_id和用戶名,還需要通過一些附加項和基於日期的查詢來加入其對應的帳戶表。 這是我要說的例子。

表用戶

user_id || user_name || user_dob    
    301 || john doe   ||  1955-01-01    
    312 || Bill Gates || 1976-01-01

表帳戶

 id  || child_id ||          inv_date     || inv_total || inv_funding    
 38  ||   301    ||  2018-05-03 12:56:38  ||    486.5  ||   45.55     
 39  ||   301    ||  2018-08-03 14:56:38  ||    222.5  ||   118.5     
 40  ||   312    ||  2018-04-03 11:56:38  ||    26.23  ||   318.5     
 41  ||   312    ||  2018-05-03 12:56:38  ||    223.22 ||   238.5     
 42  ||   312    ||  2018-06-03 13:56:38  ||    486.5  ||   258.5 

表account_balance

id || child_id || balance    
1  ||    301   || 302.00    
2  ||    312   || 43.33

對於按user_name排序的Table Users中的每個用戶,生成的表必須看起來像這樣

User Name || Last Invoiced Date || Last Funding Amount || Last Invoice Amount || Total Funding To Date || Total Invoiced To Date || Balance
john doe  || 2018-08-03 14:56:38||      118.5          ||        222.5        ||        164.05         ||        712.00          ||    302.00

這是我的一些代碼,請問c#格式顯然不能正常工作。

            invoiceTable.Query = "select  " +
                "(" +
                "max(users.user_id), " +
                "users.user_name, " +
                "max(accounts.inv_date), " +
                "max(accounts.inv_funding) as Last_funding, " +
                "max(accounts.inv_total) as Last_Invoice, " +
                "sum(accounts.inv_funding) as Total_Funding, " +
                "sum(accounts.inv_total) as Total_Invoiced from users " +
                ")" +
                "left join accounts on accounts.child_id = users.user_id group by users.user_name";

您可以嘗試使用sub-query

          select t1.*,t2.inv_funding as Last_funding,t2.inv_total as 
          Last_Invoice,ab.balance  from
               (
                select users.user_id, 
                users.user_name, 
                max(accounts.inv_date) as inv_date,
                sum(inv_funding) as Total_Funding,
                sum(inv_total) as Total_Invoiced 
                from users                    
                left join accounts on accounts.child_id = users.user_id
                group by users.user_name,users.user_id 
             ) as t1
         left join accounts t2 on t1.inv_date=t2.inv_date
         left join accounts_balance ab on t1.user_id =ab.user_id 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM