[英]MySQL: where max date in joined table less than
我有3個表 - client
, invoice
和invoice_item
。 我需要選擇所有客戶,其最后購買日期少於特定日期。 存儲在invoice_item
表中的日期購買,分配給發票的項目以及分配給客戶的發票。 這是我試過的
SELECT c.* FROM client c
INNER JOIN (
SELECT i.client_id as clid, MAX(item.date_created) as mdt
FROM invoice i
INNER JOIN invoice_item item on i.id = item.invoice_id
GROUP BY i.id
) joined
ON joined.clid = c.id
WHERE joined.mdt < date('2017-01-01')
並且
SELECT c.* FROM client c
WHERE c.id IN (
SELECT DISTINCT i.client_id FROM invoice i
INNER JOIN invoice_item item on i.id = item.invoice_id
GROUP BY i.id
HAVING MAX(item.date_created) < date('2017-01-01')
)
兩個查詢都返回錯誤的結果,這是我用來檢查正確性的查詢:
SELECT MAX(invoice_item.date_created) FROM invoice_item
INNER JOIN invoice i on invoice_item.invoice_id = i.id
WHERE client_id = {some id from the previous query};
對於某些客戶,上述查詢返回的日期大於2017-01-01
。
我做錯了什么? 謝謝。
您可以按子查詢中的發票標識符對數據進行分組,但是應該在子查詢中按client_id對數據進行分組。
SELECT c.* FROM client c
INNER JOIN (
SELECT i.client_id as clid, MAX(item.date_created) as mdt
FROM invoice i
INNER JOIN invoice_item item on i.id = item.invoice_id
GROUP BY i.client_id
) joined
ON joined.clid = c.id
WHERE joined.mdt < date('2017-01-01')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.