2017-07-14 83 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 
相關問題