2017-07-14 84 views
0

我有这样的SQL语句:如何获得最后一个记录上第二个三联接在SQL

Select 
PD.PKey 
, PD.PId 
, PVDR.ProID 
FROM `TABLE1` PD 
JOIN `TABLEFACT` FACT 
     ON PD.PId = FACT.PId 
JOIN `TABLE2` PVDR 
     ON PVDR.ProId = FACT.AProId 

TABLEFACT有场PDATE这是一个日期字段。

如何过滤TABLEFACT所以只有在连接到TABLE2之前返回MAX(PDATE)

假设MYSQL。非常感谢!

谢谢!

回答

0

您可以使用子查询,也称为派生表,如下所示:

Select 
    PD.PKey 
    , PD.PId 
    , PVDR.ProID 
FROM `TABLE1` PD 
JOIN (SELECT MAX(PDate) as Pdate, PId 
     FROM `TABLEFACT` 
     GROUP BY PId 
    ) FACT 
    ON PD.PId = FACT.PId 
JOIN `TABLE2` PVDR 
    ON PVDR.ProId = FACT.AProId 

这是假设你想要的MAX(PDate)每个PId

如果你只想要PId与最新PDate然后使用正常子查询:

Select 
    PD.PKey 
, PD.PId 
, PVDR.ProID 
FROM `TABLE1` PD 
JOIN `TABLEFACT` FACT 
    ON PD.PId = FACT.PId 
JOIN `TABLE2` PVDR 
    ON PVDR.ProId = FACT.AProId 
WHERE FACT.PDate = (SELECT MAX(PDate) FROM `TABLEFACT`) 
0

您可以使用子查询:https://dev.mysql.com/doc/refman/5.7/en/subqueries.html

Select 
PD.PKey 
, PD.PId 
, PVDR.ProID 
FROM `TABLE1` PD 
JOIN `TABLEFACT` FACT 
     ON PD.PId = FACT.PId 
     AND 
     FACT.PDATE = (
      SELECT 
       MAX(PDATE) 
      FROM 
       `TABLEFACT` 
     ) 
JOIN `TABLE2` PVDR 
     ON PVDR.ProId = FACT.AProId 
相关问题