簡體   English   中英

MySQL:連接表中的最大日期小於

[英]MySQL: where max date in joined table less than

我有3個表 - clientinvoiceinvoice_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM