2014-03-25 124 views
0

我有兩個查詢我試圖加入到一起,所以我不必一個接一個地執行,因爲在某些情況下我想更改輸出順序。MySQL獲取最新日期從哪裏依賴最新插入

第一個查詢獲取發票狀態。它更改爲保留日誌,但99%的時間,我只需要檢查最新的條目。佈局是如下:

providers_invoice_status_ID,providers_invoice_summary_ID,STATUS_ID, userinfo_ID,providers_invoice_status_date

SELECT providers_invoice_summary_ID 
    FROM db_providers_invoice_status 
WHERE status_ID = '$status' 
ORDER BY providers_invoice_status_date DESC 

發票表格然後,基於上述查詢的結果進行查詢。它的佈局如下。

providers_invoice_summary_ID,providers_invoice_summary_file,providers_invoice_summary_total,providers_invoice_summary_due,providers_invoice_summary_generated

SELECT si.providers_invoice_summary_ID 
    , providers_invoice_summary_file 
    , providers_invoice_summary_total 
    , providers_invoice_summary_due 
    , providers_invoice_summary_generated 
    FROM db_providers_invoice_summary si 
WHERE providers_invoice_summary_ID = '$invoice_ID'; 

月嘗試合併查詢,導致了這一點:

SELECT si.providers_invoice_summary_ID 
    , providers_invoice_summary_file 
    , providers_invoice_summary_total 
    , providers_invoice_summary_due 
    , providers_invoice_summary_generated 
    , s.status_ID 
    FROM db_providers_invoice_summary si, db_providers_invoice_status s 
WHERE status_ID = (SELECT status_ID 
        FROM db_providers_invoice_status 
        WHERE providers_invoice_summary_ID = si.providers_invoice_summary_ID 
        AND status_ID = 7 
        ORDER 
        BY providers_invoice_status_date DESC 
        LIMIT 1) 

然而,它拉一切從結果狀態記錄表,其中status_ID = 7,所以不太瞭解最新情況插入(狀態可能已經更改爲8,因此不需要invoice_ID)。我嘗試過使用ORDER BY,但它只對所有結果排序,而不是我之後的子集。

對此的任何幫助將非常感激。希望這對讀者來說是相當清楚的,我知道它非常複雜。

編輯數據:

發票表:

providers_invoice_summary_ID providers_invoice_summary_file providers_invoice_summary_total providers_invoice_summary_due providers_invoice_summary_generated 
---------------------------------------------------------------------------------------------------------------------------------------------------------- 
      4    |  ../blah/blah.jpg  |   245.63  |   2014-04-20    |   2014-03-14 
      5    |  ../blah/blah.jpg  |   456.89  |   2014-04-20    |   2014-03-12 
      6    |  ../blah/blah.jpg  |   125.36  |   2014-04-24    |   2014-03-12  

狀態表:

providers_invoice_status_ID providers_invoice_summary_ID status_ID userinfo_ID providers_invoice_Status_date 
------------------------------------------------------------------------------------------------------------ 
       4   |    4    | 7  |  7 | 2014-03-14 10:19:41 
       5   |    5    | 7  |  7 | 2014-03-12 10:22:41 
       6   |    6    | 7  |  7 | 2014-03-24 10:15:38 
       7   |    5    | 8  |  7 | 2014-03-26 11:15:14 

我希望拿到2張發票出這個數據的,作爲兩個發票目前有他們的最新狀態設置爲7.希望這可以進一步澄清事情。

+0

如果是我,我會簡化問題有點開始。 – Strawberry

+0

並學習正確的連接語法。隱式連接只會使查詢更難理解。 –

+0

簡化。能夠幫助我嗎? –

回答

0

這是兩個查詢的組合版本。我創建了一個子查詢來選擇狀態與輸入狀態ID匹配的發票(例如7)。狀態ID反過來從使用最新狀態日期的子查詢中獲取。

更新的查詢

SELECT 
si.providers_invoice_summary_ID 
, si.providers_invoice_summary_file 
, si.providers_invoice_summary_total 
, si.providers_invoice_summary_due 
, si.providers_invoice_summary_generated 
, invoice_status.status_ID 
FROM 
    db_providers_invoice_summary si, 
    (SELECT t1.providers_invoice_summary_ID as providers_invoice_summary_ID 
     , t1.status_id as status_id 
    FROM db_providers_invoice_status t1 
    LEFT JOIN db_providers_invoice_status t2 ON t1.providers_invoice_summary_ID = t2.providers_invoice_summary_ID AND t1.providers_invoice_Status_date < t2.providers_invoice_Status_date 
WHERE t2.providers_invoice_summary_ID IS NULL 
    AND t1.status_id = 7 
    ) invoice_status 
WHERE SI.PROVIDERS_INVOICE_SUMMARY_ID = invoice_status.PROVIDERS_INVOICE_SUMMARY_ID 

請查看sql fiddle的演示,以及。

參考

MySQL: The Rows Holding the Group-wise Maximum of a Certain Column

+0

很好的努力,但'where子句'中未知列'db_providers_invoice_status.priority' –

+0

謝謝!我忘記更改我用於測試的列名稱。對不起。 –

+0

我希望理解正確的邏輯。如果我錯了,請糾正。 –