我有以下问题。我有3张桌子,1张有发票,1张有发票记录,1张有发票的付款记录。
只有在发送发票时才能支付发票。每次付款或发送都有基于invoice_id列的关系。
所以我想要的是一张限制在5张发票上的清单,这些清单按最新的行动(发送或付款)排序。因此,如果发票的最后一次发送(基于date_time)较新,则最后一次付款(基于date_time)发票必须位于列表顶部,反之亦然。
有没有人知道如何实现这个目标?
答案 0 :(得分:1)
尝试这样的事情:
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