[英]MySQL Get latest date where dependant latest insert
我有兩個要合並在一起的查詢,因此不必一個接一個地執行,因為在某些情況下,我想更改輸出順序。
第一個查詢,獲取發票狀態。 它會更改以保留日志,但是在99%的時間內,我只需要檢查最新條目即可。 布局如下:
provider_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
然后根據上述查詢的結果查詢發票表。 布局如下。
provider_invoice_summary_ID,providers_invoice_summary_file,providers_invoice_summary_total,providers_invoice_summary_due,providers_invoice_summary_genic
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張發票,因為目前有2張發票的最新狀態設置為7張。希望這可以進一步澄清。
這是兩個查詢的組合版本。 我創建了一個子查詢來選擇狀態與輸入狀態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小提琴以獲取演示。
參考文獻 :
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.