如何在 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'))
我已经尝试了 AND
、OR
、UNION
以及我所知的所有组合来组合这两个条件并在 [=16] 时得到 MAX
=] 和 MIN
当 DESC='UTILIZACION'
运气不佳时,我通常会收到前缀 S 不匹配等错误
任何人都可以帮助解决结合这两个条件并同时仅获得 MIN 和 MAX 的最佳方法
谢谢,
您似乎在为每个 M_ORIGIN_ID
查找 max
和 min
。
如果是这种情况,并且您的上述两个查询都给出了正确的输出,那么您可以在 M_ORIGIN_ID
的基础上对 max
和 min
.[=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'))
我有这个查询需要在给定特定描述的情况下找到最大值
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
以及我所知的所有组合来组合这两个条件并在 [=16] 时得到 MAX
=] 和 MIN
当 DESC='UTILIZACION'
运气不佳时,我通常会收到前缀 S 不匹配等错误
任何人都可以帮助解决结合这两个条件并同时仅获得 MIN 和 MAX 的最佳方法
谢谢,
您似乎在为每个 M_ORIGIN_ID
查找 max
和 min
。
如果是这种情况,并且您的上述两个查询都给出了正确的输出,那么您可以在 M_ORIGIN_ID
的基础上对 max
和 min
.[=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'))