2

我想将两个查询与不同的 WHERE 子句和重叠的结果结合起来。如何使用 UNION 组合结果以区分 case_id?

第一次查询

SELECT
O.case_id,
O.otc_eff_date,
DATE_FORMAT(STR_TO_DATE(O.otc_eff_date, '%Y%j'),'%m/%d/%Y') otc_ef_date,
O.otc_type,
O.case_rsf,
O.otc_rsn,
O.otc_rlse_to,
O.seg_ent_date,
O.Seg_chg_date,
O.otc_case_status,
O.otc_opn_seq_cnt,
O.filler
FROM NU.RawCaseOTC O
WHERE O.otc_eff_date BETWEEN 2011182 AND 2012182
GROUP BY O.case_id
ORDER BY otc_ef_date

第二次查询

SELECT 
MAX(otc_eff_date) MAX_OTC_EFF_DATE, 
case_id,
otc_eff_date,
otc_type,
case_rsf,
otc_rsn,
otc_rlse_to,
seg_ent_date,
Seg_chg_date,
otc_case_status,
otc_opn_seq_cnt,
filler 
FROM NU.RawCaseOTC 
WHERE (otc_case_status != 'C') AND (otc_eff_date <='2011182')
GROUP BY case_id
ORDER BY otc_eff_date
4

2 回答 2

1

如果您 UNION 这 2 个选择然后对其进行另一个选择,则如果您将彼此的列放在 MAX 或 MIN 或 SUM 或 COUNT 或 AVG 中,则可以使 case_id 不同...

如果您希望第一行不同,则第二行必须在聚合函数中。

于 2013-03-25T22:30:27.560 回答
0

当心!是的,你可以做一些事情,比如将两个查询包装在一个嵌套SELECTGROUP BY外部查询中......但这绝对会影响你的性能,因为数据库需要将内部查询的整个输出保存到临时表并重新查询它们。如果您查询的记录数量适中,那么它就不会很漂亮。

首先尝试将两个查询组合成一个查询会更好。

当您查看这样的查询时,它可能会变得复杂,但它可以完成,并且性能应该明显更好。

我现在没有时间为您提出完美的查询,但是这里和其他地方还有一些其他问题关于如何做这种事情。也许其中之一会帮助你?

于 2013-03-25T22:50:20.877 回答