0

我有以下问题。我有 3 个表,1 个带发票,1 个带发票发送记录,1 个带发票付款记录。

只有在发送发票时才能支付发票。每次付款或发送都具有基于列 invoice_id 的关系。

所以我想要的是一个列表,限制在 5 张发票上,按最新操作(发送或付款)排序。因此,如果发票的最后一次发送(基于 date_time)较新,那么发票的最后一次付款(基于 date_time)必须在列表顶部,反之亦然。

有谁知道如何实现这一目标?

4

1 回答 1

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
于 2013-02-22T10:57:33.400 回答