从多个左连接按日期排序

时间:2013-02-22 10:52:42

标签: mysql

我有以下问题。我有3张桌子,1张有发票,1张有发票记录,1张有发票的付款记录。

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

所以我想要的是一张限制在5张发票上的清单,这些清单按最新的行动(发送或付款)排序。因此,如果发票的最后一次发送(基于date_time)较新,则最后一次付款(基于date_time)发票必须位于列表顶部,反之亦然。

有没有人知道如何实现这个目标?

1 个答案:

答案 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