2017-07-20 15 views
0

通過查看其他示例無法連接點。在寫這篇文章的時候尋找一些幫助,這樣它就會爲每個9DVN取回最新的條目:也就是說,將最後一個生效日期的一行數據拉回來。在mysql中使用最新的「effective_date」返回行

SELECT b.vndr_name AS Supplier, 
      a.VENDOR_NBR*1000 + a.VENDOR_DEPT_NBR*10 + a.VENDOR_SEQ_NBR AS "9DVN", 
      a.VENDOR_NBR AS "6DVN",a.VENDOR_DEPT_NBR AS "Dept", 
      a.VENDOR_SEQ_NBR AS "Seq" ,a.FREIGHT_FACTOR_PCT AS "Rate", 
      a.Effective_Date AS "Effect Date", 
      a.LAST_CHANGE_USERID AS "By", 
      COUNT(a.DC_NBR) AS "DC Count" 
    FROM MainTable.DC_FRT_FCTR a 
    INNER JOIN SecondaryTable ON b.vndr_nbr = a.vendor_nbr 
    ORDER BY a.Effective_Date DESC 
    GROUP BY B.vndr_name, 
    a.VENDOR_NBR, 
    a.VENDOR_DEPT_NBR, 
    a.VENDOR_SEQ_NBR, 
    a.FREIGHT_FACTOR_PCT, 
    Effective_Date, 
    a.LAST_CHANGE_USERID 
+0

您的'DC_FRT_FCTR'表是否有一列標識不同的'9DVN'值? –

+0

這個問題已經在[tag:greatest-n-per-group]標籤下回答了數百次。 –

+0

不,它不。 9dvn是三個字段的連接 – Russell

回答

0

這是一種常見的查詢模式:查找與特定列的極值相關聯的詳細信息行。

您需要一個子查詢來查找每個供應商的極端值 - 在您的案例中是最新生效日期。像這樣:

    SELECT MAX(Effective_Date) Effective_Date, 
          VENDOR_NBR*1000 + VENDOR_DEPT_NBR*10 + VENDOR_SEQ_NBR "9DVN" 
        FROM DC_FRT_FCTR 
       GROUP BY VENDOR_NBR*1000 + VENDOR_DEPT_NBR*10 + VENDOR_SEQ_NBR 

你應該測試這個子查詢,以確保它產生理智的結果。

然後,您需要將它加入到您的查詢的其餘部分,如極端值。

SELECT b.vndr_name AS Supplier, 
      a.VENDOR_NBR*1000 + a.VENDOR_DEPT_NBR*10 + a.VENDOR_SEQ_NBR AS "9DVN", 
      ...etc... 
      COUNT(a.DC_NBR) AS "DC Count" 
    FROM MainTable.DC_FRT_FCTR a 
    JOIN (
        SELECT MAX(Effective_Date) Effective_Date, 
          VENDOR_NBR*1000 + VENDOR_DEPT_NBR*10 + VENDOR_SEQ_NBR "9DVN" 
        FROM DC_FRT_FCTR 
       GROUP BY VENDOR_NBR*1000 + VENDOR_DEPT_NBR*10 + VENDOR_SEQ_NBR 
     ) latest 
       ON latest.9DVN = a.VENDOR_NBR*1000 + a.VENDOR_DEPT_NBR*10 + a.VENDOR_SEQ_NBR 
      AND latest.Effective_Date = a.Effective_Date 
    JOIN SecondaryTable b 
       ON b.vndr_nbr = a.vendor_nbr 
ORDER BY a.Effective_Date DESC 
GROUP BY B.vndr_name, 
      ... etc ... 
+0

謝謝!我會嘗試並提供更新。 – Russell