我有以下问题。我有 3 个表,1 个带发票,1 个带发票发送记录,1 个带发票付款记录。
只有在发送发票时才能支付发票。每次付款或发送都具有基于列 invoice_id 的关系。
所以我想要的是一个列表,限制在 5 张发票上,按最新操作(发送或付款)排序。因此,如果发票的最后一次发送(基于 date_time)较新,那么发票的最后一次付款(基于 date_time)必须在列表顶部,反之亦然。
有谁知道如何实现这一目标?
我有以下问题。我有 3 个表,1 个带发票,1 个带发票发送记录,1 个带发票付款记录。
只有在发送发票时才能支付发票。每次付款或发送都具有基于列 invoice_id 的关系。
所以我想要的是一个列表,限制在 5 张发票上,按最新操作(发送或付款)排序。因此,如果发票的最后一次发送(基于 date_time)较新,那么发票的最后一次付款(基于 date_time)必须在列表顶部,反之亦然。
有谁知道如何实现这一目标?
尝试这样的事情:
SELECT (SELECT MAX(DATE)
FROM (SELECT DATE
FROM PAYMENTS P
WHERE P.INVOICE_ID = IN.INVOICE_ID
UNION
SELECT DATE
FROM SENDS S
WHERE S.INVOICE_ID = IN.INVOICE_ID) SUB) MAX_DATE,
IN.*
FROM INVOICE IN
ORDER BY 1 DESC
LIMIT 5
更新:
上面的 SQL 不起作用,因为无法在第二级子选择中访问表发票。
试试这个选择:
SELECT V.*
FROM verkoopfacturen AS V
LEFT JOIN (SELECT invoice_id,
MAX(datum) as max_date
FROM (SELECT P.invoice_id,
P.date AS datum
FROM invoice_payments AS P
UNION
SELECT S.file_id,
S.datum AS datum
FROM email AS S) SUB
GROUP BY SUB.invoice_id) SUB2 on V.Verkoopfact_InfId = SUB2.invoice_id
ORDER BY SUB2.MAX_DATE DESC
LIMIT 5