java从2个表中获取每个最新数据,从另一个表中获取数据
0
我有如下数据:
table_a
ID CREATED_DATE PRODUCT
-----------------------------------------------
AA 2017-05-19 02:00:00 PHONE
BB 2017-05-19 02:00:00 CAMERA
CC 2017-05-19 02:00:00 TELIVISION
table_b
ID TRANS_ID CREATED_DATE STATUS_ORDER
---------------------------------------------------
1 AA 2017-05-19 02:00:00 WAITING
2 AA 2017-05-20 02:00:00 IN_PROCESS
3 BB 2017-05-19 02:00:00 WAITING
4 CC 2017-05-19 02:00:00 WAITING
5 CC 2017-05-20 02:00:00 CANCELLED
table_c
ID TRANS_ID CREATED_DATE STATUS_PAYMENT
-----------------------------------------------------
1 BB 2017-05-19 02:00:00 WAITING
table_d
ID TRANS_ID CREATED_DATE STATUS_CONTRACT
-------------------------------------------------------
1 AA 2017-05-19 02:00:00 IN_PROCESS
2 AA 2017-05-20 02:00:00 APPROVED
4 CC 2017-05-19 02:00:00 IN_PROCESS
5 CC 2017-05-20 02:00:00 REJECT
我想在表视图中显示如下数据:
ID CREATED_DATE STATUS_ORDER STATUS_PAYMENT STATUS_CONTRACT
--------------------------------------------------------------------------------------------
AA 2017-05-19 02:00:00 IN_PROCESS NULL APPROVED
BB 2017-05-19 02:00:00 WAITING WAITING NULL
CC 2017-05-19 02:00:00 CANCELLED NULL REJECT
我从表b和表d中获取每个trans_id的最新数据,并运行此查询,但它无法从表c获取数据,因为表d上不存在trans_id
SELECT
a.id,
a.created_date,
b.status_order,
c.status_payment,
d.status_contract
FROM
table_a a
INNER JOIN table_b b ON a.id = b.trans_id
LEFT OUTER JOIN table_c c ON a.id = c.trans_id
LEFT OUTER JOIN table_c d ON a.id = d.trans_id
WHERE
b.created_date = (
SELECT
MAX(e.created_date)
FROM
table_b e
WHERE
b.trans_id = e.trans_id
)
AND
d.created_date = (
SELECT
MAX(f.created_date)
FROM
table_d f
WHERE
f.trans_id = d.trans_id
)
结果是:
ID CREATED_DATE STATUS_ORDER STATUS_PAYMENT STATUS_CONTRACT
------------------------------------------------------------------------------
AA 2017-05-19 02:00:00 IN_PROCESS NULL APPROVED
CC 2017-05-19 02:00:00 CANCELLED NULL REJECT
这并不像预期的那样
# 1 楼答案
像这样的怎么样?遵循代码中的注释。示例数据从第1行到第22行,所以您需要的代码从第23行开始
# 2 楼答案
您可以在oracle 18c DB fiddle链接上找到具有所需输出的完整解决方案:https://dbfiddle.uk/?rdbms=oracle_18&fiddle=3f3de8149268cfef58fe7be28106ab3a 我用https://dbfiddle.uk/上提供的数据创建了数据模型,并通过查询和所需的输出解决了问题
查询如下:
输出: