我用这个代码从我的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 |0
45 |8 |-2 |0
98 |8 |8 |0
98 |8 |2 |0
106 |8 |0 |-1
106 |8 |0 |-9
如果eai\u t或eax\u t为正数,请选择具有最高值的行;如果eai\u t或eax\u t为负数,请选择最低值,如果
45 |8 |-3 |0
45 |8 |-2 |0
选择具有-3的行,如果
98 |8 |8 |0
98 |8 |2 |0
选择具有8的行
更新:我有4600万行,h是指小时,所以在一天内我有1000台设备,我需要得到h中的数据平均值,如果它高于0,得到一天中的最高值,如果最低值低于0,得到最低的行,用这个数据生成另一个表,所以sr ref到设备id,在我的新表中,我将选择我找到的数据,并生成h1,h2。。。。对于设备
2条答案
按热度按时间bvjxkvbb1#
因为问题所有者在代码中使用了avg。我猜所有者希望根据sr和h的平均值(eax\u t)正或负分组得到最高或最低的数字。
当平均值大于0时取最大值,小于0时取最小值,等于0时取0。
我认为所有者数据只是sr和h组中的一个符号。我也给了@forpas upvote,因为我认为他的答案符合主人的想法。
wqnecbli2#
可以使用max()窗口函数:
请看演示。
结果: