我试图学习SQL,但遇到一个无法解决自己的问题。 我有一张桌子,想从中获取一个特定值,但似乎无法解决它。
我要创建直到Today-2的平均值,并为Today-1创建一个CASE,以检查其值(12)是否偏离太多。
问题:我无法从2019年7月26日获得价值; 天是(sysdate-8)-> sysdate
| day | value |
|------------|------- |
| 19.07.2019 | 10 | <-- START
| 20.07.2019 | 13 |
| 21.07.2019 | 13 |
| 22.07.2019 | 12 |
| 23.07.2019 | 13 |
| 24.07.2019 | 18 |
| 25.07.2019 | 16 | <-- STOP AVERAGE
| 26.07.2019 | 12 | <-- COMPARE AVERAGE WITH THIS
| 27.07.2019 | 5 | <-- IGNORE SINCE DATA FROM TODAY NOT COMPLETE
感谢您阅读
答案 0 :(得分:0)
您可能正在寻找一个窗口函数来计算运行平均值:
select t.*,
avg(value) over (order by day rows between 8 preceding and 1 preceding) as running_avg
from t;
答案 1 :(得分:0)
我试图基于日期值创建一个解决方案,并且不使用解析函数,因为如果某天的数据丢失并且解析函数在多行而不是数据上工作,它可能会给出错误的结果。
以下查询将为您提供前一天值的输出以及当前天的平均值-8到当前天-2
SELECT
MAX(CASE
WHEN DAY = SYSDATE - 1 THEN VALUE
END) AS LAST_DAY_VALUE,
AVG(CASE
WHEN DAY BETWEEN SYSDATE - 8 AND SYSDATE - 2 THEN VALUE
END) AS AVG_B4_LAST_TO_LAST_DAY
FROM
YOUR_TABLE;
干杯!