联合查询中的最新行

时间:2014-05-08 21:45:35

标签: sql

我有以下情况 3表A.customers,B。发票C.付款。

我希望将客户的发票和付款合并,并仅使用最近一行(发票或付款)来获取每个客户的余额。 我写了下面的查询,但我感到头晕,困惑,我需要帮助

select *
FROM mainTable inner join

    (select max(dDate) as maxDate FROM
    (SELECT companies_1.id, 
            companies_1.eponymia, 
            invoices.datePublished AS dDate, 
            invoices.new_balance
     FROM    companies AS companies_1 
         INNER JOIN  invoices ON companies_1.id = invoices.pelaths_id
   UNION
     SELECT companies.id, 
            companies.eponymia, 
            payments.payDate AS dDate, 
            payments.new_balance
     FROM   payments 
         INNER JOIN  companies AS companies ON payments.pelaths_id = companies.id
) 
       AS mainTable
    GROUP by eponymia ) AS M ON maintable.dDate=m.dDate

这给了我错误:表[mainTable]不存在。

如何解决我的问题?

谢谢

1 个答案:

答案 0 :(得分:0)

您不能从该子查询外部的内部子查询引用表。范围完全没有了。

在大多数数据库中,您只需使用窗口/分析功能即可。这是一个更简单的方法:

select *
FROM (select maintable.*,
             row_number() over (partition by eponymia order by ddate desc) as seqnum 
      from (SELECT companies_1.id, companies_1.eponymia, invoices.datePublished AS dDate, invoices.new_balance
            FROM companies AS companies_1 INNER JOIN
                 invoices 
                 ON companies_1.id = invoices.pelaths_id
            UNION
            SELECT companies.id, companies.eponymia, payments.payDate AS dDate, payments.new_balance
            FROM payments INNER JOIN
                 companies AS companies
            ON payments.pelaths_id = companies.id
           ) mainTable
     ) M
where seqnum = 1;