我有三个表查询两个类似的表和合并排序结果
orders.orderid (and other non-pertinent stuff)
payment.orderid
payment.transactiondate
payment.amount
projectedpayment.orderid
projectedpayment.projecteddate
projectedpayment.projectedamount
从本质上讲,payment
表示当收到实际付款; projectedpayment
表示何时系统认为应该收到它们。我需要建立一个查询来比较投影与实际。
我想查询它们,以便查询中的每一行都有orderid,payment.transactiondate,payment.amount,projectedpayment.projecteddate,projectedpayment.projectedamount,其中来自付款和预计付款的行按其各自的日期排序。例如,
orderid transactiondate amount projecteddate projectedamount
1 2015-01-01 12.34 2015-01-03 12.34
1 2015-01-15 12.34 2015-01-15 12.44
1 null null 2015-02-01 12.34
2 2014-12-31 50.00 null null
因此,通过订单分解,有哪些实际和预计支付,其中可能会有更多的投影支付比实际的,或比预计的更实际支付,按日期(排列简单地通过排序两种,没有比这更复杂的了)。
好像我应该能够从orders
有left join
实现这一目标,以某种与order by
排序的其他两个表的union
,但我一直没能使其工作,所以它可能是完全不同的东西。我知道我无法加入order
,payment
和projectedpayment
的全部三个,或者我得到后两个表的交叉积。
我恰好在使用postgresql
9.4,但希望我们不需要太过于数据库特定。
谢谢!与'row_number().. over()'结合的'full join'是解决我以前从未见过的一个聪明的方法。 – koehn
我做了大量的数据迁移/主数据/数据审查工作,像这样的技术是救星:D – gordatron