下面是我当前的代码。我不确定最好的方法是修改它以使我得到所需的结果。
BaseManager
上面的代码有效。但是,这是我需要帮助的T5上的最后一个左联接。
在T1中,每个M_ID都分配了自己的DOFS_DATE,该DOFS_DATE可以是一年中的任何日期,我希望从T5 U_DB.TEH_201804获得数据作为匹配日期。但是,5 U_DB.TEH_201804仅与2018年4月相关。有12个具有相同数据库的表(201804、201805、201806等),它们具有完全相同的列,但与一年中的不同月份相关。
理想情况下,我想离开T5的列一次,但要搜索数据库中的所有12个表以取回日期对应的数据。
我当时在想UNION,但不确定如何使用。
任何帮助将不胜感激!
谢谢
答案 0 :(得分:0)
您可以更改与表t5相关的代码,并在子查询上左连接,从而为您需要的所有捆选择全部并集...(我已将子查询命名为TT)
SELECT
T1.SC,
T1.AN,
T1.DOFS_DATE,
T2.M_ID,
T3.OPDT,
T4.MARKER,
TT.E_DTE,
TT.E_TME,
TT.E_PST_DTE,
TT.E_AMT,
TT.E_NAR_O,
TT.E_NAR_T
FROM E_Base.AR_MyTable T1
LEFT JOIN E_Base.Translation T2
ON T1.SC = T2.SC
AND T1.AN = T2.AN
LEFT JOIN E_Base.BA T3
ON T2.M_ID = T3.M_ID
LEFT JOIN E_Base.APF T4
ON T3.M_ID = T4.M_ ID
AND MARKER = 54
LEFT JOIN (
select *
FROM U_DB.TEH_201804
UNION ALL
select *
FROM U_DB.TEH_201805
UNION ALL
select *
FROM U_DB.TEH_201806
UNION ALL
select *
FROM U_DB.TEH_201807
UNION ALL
.....
) TT ON T2.M_ID = TT.M_ID
AND T1.DOFS_DATE = TT.E_PST_DTE
QUALIFY ROW_NUMBER() OVER (PARTITION BY T2.M_ID ORDER BY T2.ID_END_DATE DESC, T3.E_END_DATE DESC) = 1
答案 1 :(得分:0)
如果没有解释和QueryLog步骤数据之类的其他详细信息,很难说出来。
基于@scaisEdge答案:
您可以尝试将前两个联接移到派生表中以尽早应用ROW_NUMBER(可能是因为仅执行外部联接):
SELECT
dt.*,
T4.MARKER,
TT.E_DTE,
TT.E_TME,
TT.E_PST_DTE,
TT.E_AMT,
TT.E_NAR_O,
TT.E_NAR_T
FROM
(
SELECT
T1.SC,
T1.AN,
T1.DOFS_DATE,
T2.M_ID,
T3.OPDT
FROM E_Base.AR_MyTable T1
LEFT JOIN E_Base.Translation T2
ON T1.SC = T2.SC
AND T1.AN = T2.AN
LEFT JOIN E_Base.BA T3
ON T2.M_ID = T3.M_ID
QUALIFY Row_Number()
Over (PARTITION BY T2.M_ID
ORDER BY T2.ID_END_DATE DESC, T3.E_END_DATE DESC) = 1
) AS dt
LEFT JOIN E_Base.APF T4
ON dt.M_ID = T4.M_ID
AND MARKER = 54
LEFT JOIN
(
SELECT *
FROM U_DB.TEH_201804
UNION ALL
SELECT *
FROM U_DB.TEH_201805
UNION ALL
SELECT *
FROM U_DB.TEH_201806
UNION ALL
SELECT *
FROM U_DB.TEH_201807
UNION ALL
.....
) TT
ON dt.M_ID = TT.M_ID
AND dt.DOFS_DATE = TT.E_PST_DTE
它还可以帮助优化器提供有关数据范围的其他信息。这些表应具有CHECK约束,以告知优化器它们仅包含一个月的数据,如果不存在,请尝试向每个Select添加WHERE条件,例如WHERE E_PST_DTE BETWEEN DATE '2018-04-01' AND DATE '2018-04-30'
。
当然,请务必检查“说明”,以了解计划是否确实发生了变化...