2015-01-21 142 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;