首页 > 解决方案 > 如何在 WHERE 条件中组合 MIN 和 MAX

问题描述

我有这个查询,它需要在给定特定描述的情况下找到一个 MAX 值

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'))

我已经尝试过AND, OR, UNION, 和我所知道的所有类型的组合来组合这两个条件并获得何时MAX何地没有运气,我通常会收到前缀 S 不匹配的错误,等等。DESC='ALTA'MINDESC='UTILIZACION'

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

谢谢,

标签: sqlsybase

解决方案


似乎您正在寻找maxandmin为每个M_ORIGIN_ID. 如果这是条件并且您的上述两个查询都给出了正确的输出,那么您可以在for和 forunion all的基础上使用。M_ORIGIN_IDmaxmin

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'))

推荐阅读