我有以下情况 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]不存在。
如何解决我的问题?
谢谢
答案 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;