2015-01-21 71 views
1

我在MySQL的表1和表2PHP的MySQL與左外連接

table1的兩個表有以下字段

Field    Type  

intProjectId  int(11)   
intSourceId  int(11)  
intClientId   int(11)  
varProject  varchar(200)  
fltAmount   float    
varAmountType varchar(50) 
dtStart    date  
dtEnd    date 

和表2有以下領域

Field         Type 

intPercentageId      int(11)  
intProjectId      int(11)   
floatPaymentpercentage    float 
ddDate        datetime 

連接兩個表與普通項目id.If表2沒有記錄與特定項目ID它可以作爲空加入..

表1有項目數據 表2有其完成百分比。 (每個項目都有一個以上的記錄)。 項目標識 - 公共字段

- 稠以下查詢

SELECT * FROM table1 LEFT OUTER JOIN table2 ON table1.intProjectId = table2.intProjectId 
GROUP BY table1.varProject ORDER BY table2.intPercentageId DESC 

這裏我得到的輸出比例表返回每個項目的第一條記錄。我需要表格2的最後插入記錄。

table1 ==>項目ID 5 表2中有3個項目ID爲5的記錄。我想從表格2中創建最後一條記錄。現在它返回表2中的第一條記錄

如何更改查詢。請幫我解決這個問題。

回答

1

計算表2中每個項目的最高紀錄,並利用這些信息來獲得最新的記錄。以下是使用group by的方法:

select t1.* 
from table1 t1 join 
table2 t2 
on t1.intProjectId = t2.intProjectId join 
(select t2.intProjectId, max(intPercentageId) as maxpi 
    from table2 t2 
    group by t2.intProjectId 
) tt2 
on t2.intProjectId = tt2.maxpi; 
-1

試試這個

SELECT * FROM table1 LEFT OUTER JOIN table2 ON table1.intProjectId = table2.intProjectId 
GROUP BY table1.varProject HAVING MAX(table2.intPercentageId) 

「排序」後運行「組由」已經完成,這就是爲什麼它是不是給預期的結果。我建議的更改將從第二個表中獲得最高百分比的行,根據該方案應該是項目的最後一行。

0

計算table2中每個項目的最大記錄並使用該信息獲取最新記錄。下面是一個使用group by的方法:

select t1.* 
from table1 t1 join 
    table2 t2 
    on t1.intProjectId = t2.intProjectId join 
    (select t2.intProjectId, max(intPercentageId) as maxpi 
     from table2 t2 
     group by t2.intProjectId 
    ) tt2 
    on t2.intProjectId = tt2.maxpi;