我有此查询,要求在给定说明的情况下找到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
时得到DESC='ALTA'
和MIN
,当DESC='UTILIZACION'
没有运气时,我通常会收到一个错误,即前缀S不匹配,等等。
任何人都可以帮忙,找到结合这两个条件并同时仅获取MIN和MAX的最佳方法是什么
谢谢
答案 0 :(得分:0)
似乎您正在为每个max
找到min
和M_ORIGIN_ID
。
如果是这种情况,并且您上面的两个查询都给出了正确的输出,那么您可以根据union all
为M_ORIGIN_ID
和max
使用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'))