我需要以下方案提供一些帮助,
我有两张桌子,
MESSAGE_CONTEXT_TABLE (CONTEXT_ID,NAME,DESCRIPTION,PACKAGE) PK(CONTEXT_ID,PACKAGE)
PACKAGE_INFO_TABLE (PACKAGE,DESCRIPTION,PACKAGE_ORDER) PK (PACKAGE_NAME)
我需要在这些表上执行连接。当有多个记录具有相同的CONTEXT_ID(但具有不同的PACKAGE)时,我需要获取与PACKAGE_INFO_TABLE中的最大PACKAGE_ORDER相对应的行。
有人可以建议我吗?
提前致谢!
答案 0 :(得分:0)
这样的事情应该有效:
SELECT *
FROM MESSAGE_CONTEXT_TABLE tm
INNER JOIN PACKAGE_INFO_TABLE tp ON tm.package = tp.package
WHERE tp.package_order >= ALL (SELECT tp1.PACKAGE_ORDER
FROM MESSAGE_CONTEXT_TABLE tm1
INNER JOIN PACKAGE_INFO_TABLE tp1 ON tm1.package = tp1.package
WHERE tm1.context_id = tm.context_id)
或者这样:
SELECT tm.*, tp.*
FROM MESSAGE_CONTEXT_TABLE tm
INNER JOIN PACKAGE_INFO_TABLE tp ON tm.package = tp.package
LEFT JOIN PACKAGE_INFO_TABLE tp1 ON tm.package = tp1.package
AND tp1.package_order > tp.package_order
WHERE tp1.package_order IS NULL
答案 1 :(得分:0)
SELECT mct.Context_ID, MAX(pit.Package_Order)
FROM Package_Info_Table pit
INNER JOIN MESSAGE_CONTEXT_TABLE mct
ON mct.Context_ID = pit.Context_ID
AND mct.Package <> pit.package
答案 2 :(得分:0)
以下解决方案使用两个CTE。第一个(allorders
)加入两个表,而不用担心PACKAGE_ORDER
。第二个(maxorders
)使用前一个结果获取每个上下文ID的最大包顺序。主查询返回allorders
中存在CONTEXT_ID
和PACKAGE_ORDER
的{{1}}行:
maxorders
我为此查询创建了fiddle。