如何在 WHERE 条件下组合 MIN 和 MAX

How to combine MIN and MAX inside a WHERE condition

我有这个查询需要在给定特定描述的情况下找到最大值

select * from SCA_FXDFWD_REP S
where S.M_TRADE_NUM in  (SELECT MAX(S_AUX.M_TRADE_NUM)
                         FROM SCA_FXDFWD_REP S_AUX
                         WHERE S_AUX.M_ORIGIN_ID= S.M_ORIGIN_ID
                         AND S_AUX.M_SCA_DESC= 'ALTA'
                         GROUP BY  S_AUX.M_SCA_ORIG, S_AUX.M_TRADE_DAT)

这很好用,但现在我需要添加另一个条件,该条件需要为另一个类似条件找到 de MIN:

SELECT * FROM SCA_FXDFWD_REP S
WHERE M_TRADE_NUM IN ((SELECT MIN(M_TRADE_NUM) FROM SCA_FXDFWD_REP S_AUX 
where S_AUX.M_ORIGIN_ID = S.M_ORIGIN_ID
AND S_AUX.M_SCA_DESC= 'UTILIZACION'))

我已经尝试了 ANDORUNION 以及我所知的所有组合来组合这两个条件并在 [=16] 时得到 MAX =] 和 MINDESC='UTILIZACION' 运气不佳时,我通常会收到前缀 S 不匹配等错误

任何人都可以帮助解决结合这两个条件并同时仅获得 MIN 和 MAX 的最佳方法

谢谢,

您似乎在为每个 M_ORIGIN_ID 查找 maxmin。 如果是这种情况,并且您的上述两个查询都给出了正确的输出,那么您可以在 M_ORIGIN_ID 的基础上对 maxmin.[=18= 使用 union all ]

select * from SCA_FXDFWD_REP S
where S.M_TRADE_NUM in  (SELECT MAX(S_AUX.M_TRADE_NUM)
                         FROM SCA_FXDFWD_REP S_AUX
                         WHERE S_AUX.M_ORIGIN_ID= S.M_ORIGIN_ID
                         AND S_AUX.M_SCA_DESC= 'ALTA'
                         GROUP BY  S_AUX.M_SCA_ORIG, S_AUX.M_TRADE_DAT)
union all
SELECT * FROM SCA_FXDFWD_REP S
WHERE M_TRADE_NUM IN ((SELECT MIN(M_TRADE_NUM) FROM SCA_FXDFWD_REP S_AUX 
where S_AUX.M_ORIGIN_ID = S.M_ORIGIN_ID
AND S_AUX.M_SCA_DESC= 'UTILIZACION'))

在where条件

中使用or
select * from SCA_FXDFWD_REP S
where S.M_TRADE_NUM =  (SELECT MAX(S_AUX.M_TRADE_NUM)
                         FROM SCA_FXDFWD_REP S_AUX
                         WHERE S_AUX.M_ORIGIN_ID= S.M_ORIGIN_ID
                         AND S_AUX.M_SCA_DESC= 'ALTA'
                         GROUP BY  S_AUX.M_SCA_ORIG, S_AUX.M_TRADE_DAT)
or S.M_TRADE_NUM = ((SELECT MIN(M_TRADE_NUM) FROM SCA_FXDFWD_REP S_AUX 
where S_AUX.M_ORIGIN_ID = S.M_ORIGIN_ID
AND S_AUX.M_SCA_DESC= 'UTILIZACION'))