SQL-获取正值的最高值和负值的最低值
我使用此代码从我的oracle数据库服务器获取平均数,现在我需要代码来获取最大值(如果为正)和最小值(如果为负)的数字。我该怎么做SQL-获取正值的最高值和负值的最低值,sql,oracle19c,Sql,Oracle19c,我使用此代码从我的oracle数据库服务器获取平均数,现在我需要代码来获取最大值(如果为正)和最小值(如果为负)的数字。我该怎么做 Select AVG(EAX_T) AS EAX, AVG(EAI_T) AS EAI, H FROM TABLENAME WHERE SR = ? AND TO_DATE(DATEADD) = ? GROUP BY H ORDER BY H ASC 数据可以如下所示: SR |H |EAX_T |EAI_T 45 |8 |-3
Select AVG(EAX_T) AS EAX, AVG(EAI_T) AS EAI, H
FROM TABLENAME
WHERE SR = ? AND TO_DATE(DATEADD) = ?
GROUP BY H
ORDER BY H ASC
数据可以如下所示:
SR |H |EAX_T |EAI_T
45 |8 |-3 |0
45 |8 |-2 |0
98 |8 |8 |0
98 |8 |2 |0
106 |8 |0 |-1
106 |8 |0 |-9
我希望sql查询按H和SR选择行组如果EAI\u T或EAX\u T为正数选择具有最高值的行,如果EAI\u T或EAX\u T为负数选择最低值,如果
45 |8 |-3 |0
45 |8 |-2 |0
选择具有-3的行
如果
选择具有8个字符的行
更新:
我有4600万行,H是对小时的引用,所以在一天中我有1000台设备,我需要得到H中的数据平均值,如果它高于0,则得到当天的最高值,如果低于0,则得到最低行,以生成另一个包含此数据的表,所以SR ref到设备Id,在我的新表中,我将选择我找到的数据并生成H1,H2。。。。对于设备,因为问题所有者在代码中使用AVG。我猜所有者希望根据SR和H的平均正或负组得到最高或最低的数字 当平均值大于0得到最大值,小于0得到最小值,等于0得到0时的用例
select SR,H ,
case
when AVG(EAX_T) >0 then Max(EAX_T)
when AVG(EAX_T) <0 then Min(EAX_T) else 0 end as EAX,
case
when AVG(EAI_T) >0 then Max(EAI_T)
when AVG(EAI_T) <0 then Min(EAI_T) else 0 end as EAI from TABLENAME group by SR,H
我认为所有者数据只是SR和H组中的一个符号。我也给出@forpas upvote,因为我认为他的答案与所有者的想法相符。您可以使用MAX window函数:
select distinct t.*
from (
select t.sr, t.h,
sign(eax_t) * max(abs(eax_t)) over (partition by sr, h) eax_t,
sign(eai_t) * max(abs(eai_t)) over (partition by sr, h) eai_t
from tablename t
) t
order by t.sr, t.h
看。
结果:
你能提供更多关于get数字的细节吗?如果是正数,则最高;如果是负数,则最低@劉鎮瑲 帖子更新,对不起我的英语分享你的意思是:选择S,当AVGEAX\u T>0时为case,然后当AVGEAX\u T时为MaxEAX\T我建议你在帖子中给出你拥有的数据和你想要的结果。它可以帮助更多的人知道你想要什么。您的表包含每个设备SR和H.2小时的多行。每个设备需要每小时EAX_T和EAI_T的平均值。3.如果一小时的平均EAX_T为负值,则需要该小时的最小EAX_T。如果一小时的平均EAX_T为正值,则需要该小时的最大EAX_T。EAI_T也一样。如果是这样,那么劉鎮瑲's的查询符合您的要求,而forpas的查询不符合您的要求。请不要只发布代码作为答案,还要解释代码的作用以及它如何解决问题。带有解释的答案通常更有帮助,质量更好,更容易吸引选票@劉鎮瑲 谢谢你的帮助
select distinct t.*
from (
select t.sr, t.h,
sign(eax_t) * max(abs(eax_t)) over (partition by sr, h) eax_t,
sign(eai_t) * max(abs(eai_t)) over (partition by sr, h) eai_t
from tablename t
) t
order by t.sr, t.h
> SR | H | EAX_T | EAI_T
> --: | -: | ----: | ----:
> 45 | 8 | -3 | 0
> 98 | 8 | 8 | 0
> 106 | 8 | 0 | -9