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

时间:2019-07-29 10:17:43

标签: sql sybase

我有此查询,要求在给定说明的情况下找到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'))

在我所知的范围内,我尝试了ANDORUNION和各种组合,以结合两个条件并在MAX时得到DESC='ALTA'MIN,当DESC='UTILIZACION'没有运气时,我通常会收到一个错误,即前缀S不匹配,等等。

任何人都可以帮忙,找到结合这两个条件并同时仅获取MIN和MAX的最佳方法是什么

谢谢

2 个答案:

答案 0 :(得分:0)

似乎您正在为每个max找到minM_ORIGIN_ID。 如果是这种情况,并且您上面的两个查询都给出了正确的输出,那么您可以根据union allM_ORIGIN_IDmax使用min

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

答案 1 :(得分:0)

在有条件的地方使用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'))