Я хочу запросить среднее значение за месяц и объединить со средним значением с начала года, я уже сделал среднемесячное значение, но не имею понятия для объединения среднего с начала года.
sqlfiddle, отредактировано из Mr Avi Code
sqlFiddle link
SELECT TO_CHAR(order_month, 'MON-YY'), order_avg
FROM (
SELECT TRUNC("Dayofmonth", 'MM') AS order_month, AVG("Numbervalue") AS order_avg
FROM RAW_AVG
GROUP BY TRUNC("Dayofmonth", 'MM')
ORDER BY order_month
)
Ожидаемый результат
|ЯНВ-18 |12.000000 |Средний (январь)
|ФЕВ-18 |13.423729 |Среднее (с 1 января по 28 февраля)
|МАР-18 |13.476923 |Среднее значение (с 1 января по 6 марта)
Схема
CREATE TABLE RAW_AVG
("Dayofmonth" date, "Numbervalue" int)
;
INSERT ALL
INTO RAW_AVG ("Dayofmonth", "Numbervalue")
VALUES ('01-Jan-2018', 12)
INTO RAW_AVG ("Dayofmonth", "Numbervalue")
VALUES ('02-Jan-2018', 12)
INTO RAW_AVG ("Dayofmonth", "Numbervalue")
VALUES ('03-Jan-2018', 12)
INTO RAW_AVG ("Dayofmonth", "Numbervalue")
VALUES ('04-Jan-2018', 12)
INTO RAW_AVG ("Dayofmonth", "Numbervalue")
VALUES ('05-Jan-2018', 12)
INTO RAW_AVG ("Dayofmonth", "Numbervalue")
VALUES ('06-Jan-2018', 12)
INTO RAW_AVG ("Dayofmonth", "Numbervalue")
VALUES ('07-Jan-2018', 12)
INTO RAW_AVG ("Dayofmonth", "Numbervalue")
VALUES ('08-Jan-2018', 12)
INTO RAW_AVG ("Dayofmonth", "Numbervalue")
VALUES ('09-Jan-2018', 12)
INTO RAW_AVG ("Dayofmonth", "Numbervalue")
VALUES ('10-Jan-2018', 12)
INTO RAW_AVG ("Dayofmonth", "Numbervalue")
VALUES ('11-Jan-2018', 12)
INTO RAW_AVG ("Dayofmonth", "Numbervalue")
VALUES ('12-Jan-2018', 12)
INTO RAW_AVG ("Dayofmonth", "Numbervalue")
VALUES ('13-Jan-2018', 12)
INTO RAW_AVG ("Dayofmonth", "Numbervalue")
VALUES ('14-Jan-2018', 12)
INTO RAW_AVG ("Dayofmonth", "Numbervalue")
VALUES ('15-Jan-2018', 12)
INTO RAW_AVG ("Dayofmonth", "Numbervalue")
VALUES ('16-Jan-2018', 12)
INTO RAW_AVG ("Dayofmonth", "Numbervalue")
VALUES ('17-Jan-2018', 12)
INTO RAW_AVG ("Dayofmonth", "Numbervalue")
VALUES ('18-Jan-2018', 12)
INTO RAW_AVG ("Dayofmonth", "Numbervalue")
VALUES ('19-Jan-2018', 12)
INTO RAW_AVG ("Dayofmonth", "Numbervalue")
VALUES ('20-Jan-2018', 12)
INTO RAW_AVG ("Dayofmonth", "Numbervalue")
VALUES ('21-Jan-2018', 12)
INTO RAW_AVG ("Dayofmonth", "Numbervalue")
VALUES ('22-Jan-2018', 12)
INTO RAW_AVG ("Dayofmonth", "Numbervalue")
VALUES ('23-Jan-2018', 12)
INTO RAW_AVG ("Dayofmonth", "Numbervalue")
VALUES ('24-Jan-2018', 12)
INTO RAW_AVG ("Dayofmonth", "Numbervalue")
VALUES ('25-Jan-2018', 12)
INTO RAW_AVG ("Dayofmonth", "Numbervalue")
VALUES ('26-Jan-2018', 12)
INTO RAW_AVG ("Dayofmonth", "Numbervalue")
VALUES ('27-Jan-2018', 12)
INTO RAW_AVG ("Dayofmonth", "Numbervalue")
VALUES ('28-Jan-2018', 12)
INTO RAW_AVG ("Dayofmonth", "Numbervalue")
VALUES ('29-Jan-2018', 12)
INTO RAW_AVG ("Dayofmonth", "Numbervalue")
VALUES ('30-Jan-2018', 12)
INTO RAW_AVG ("Dayofmonth", "Numbervalue")
VALUES ('31-Jan-2018', 12)
INTO RAW_AVG ("Dayofmonth", "Numbervalue")
VALUES ('01-Feb-2018', 15)
INTO RAW_AVG ("Dayofmonth", "Numbervalue")
VALUES ('02-Feb-2018', 15)
INTO RAW_AVG ("Dayofmonth", "Numbervalue")
VALUES ('03-Feb-2018', 15)
INTO RAW_AVG ("Dayofmonth", "Numbervalue")
VALUES ('04-Feb-2018', 15)
INTO RAW_AVG ("Dayofmonth", "Numbervalue")
VALUES ('05-Feb-2018', 15)
INTO RAW_AVG ("Dayofmonth", "Numbervalue")
VALUES ('06-Feb-2018', 15)
INTO RAW_AVG ("Dayofmonth", "Numbervalue")
VALUES ('07-Feb-2018', 15)
INTO RAW_AVG ("Dayofmonth", "Numbervalue")
VALUES ('08-Feb-2018', 15)
INTO RAW_AVG ("Dayofmonth", "Numbervalue")
VALUES ('09-Feb-2018', 15)
INTO RAW_AVG ("Dayofmonth", "Numbervalue")
VALUES ('10-Feb-2018', 15)
INTO RAW_AVG ("Dayofmonth", "Numbervalue")
VALUES ('11-Feb-2018', 15)
INTO RAW_AVG ("Dayofmonth", "Numbervalue")
VALUES ('12-Feb-2018', 15)
INTO RAW_AVG ("Dayofmonth", "Numbervalue")
VALUES ('13-Feb-2018', 15)
INTO RAW_AVG ("Dayofmonth", "Numbervalue")
VALUES ('14-Feb-2018', 15)
INTO RAW_AVG ("Dayofmonth", "Numbervalue")
VALUES ('15-Feb-2018', 15)
INTO RAW_AVG ("Dayofmonth", "Numbervalue")
VALUES ('16-Feb-2018', 15)
INTO RAW_AVG ("Dayofmonth", "Numbervalue")
VALUES ('17-Feb-2018', 15)
INTO RAW_AVG ("Dayofmonth", "Numbervalue")
VALUES ('18-Feb-2018', 15)
INTO RAW_AVG ("Dayofmonth", "Numbervalue")
VALUES ('19-Feb-2018', 15)
INTO RAW_AVG ("Dayofmonth", "Numbervalue")
VALUES ('20-Feb-2018', 15)
INTO RAW_AVG ("Dayofmonth", "Numbervalue")
VALUES ('21-Feb-2018', 15)
INTO RAW_AVG ("Dayofmonth", "Numbervalue")
VALUES ('22-Feb-2018', 15)
INTO RAW_AVG ("Dayofmonth", "Numbervalue")
VALUES ('23-Feb-2018', 15)
INTO RAW_AVG ("Dayofmonth", "Numbervalue")
VALUES ('24-Feb-2018', 15)
INTO RAW_AVG ("Dayofmonth", "Numbervalue")
VALUES ('25-Feb-2018', 15)
INTO RAW_AVG ("Dayofmonth", "Numbervalue")
VALUES ('26-Feb-2018', 15)
INTO RAW_AVG ("Dayofmonth", "Numbervalue")
VALUES ('27-Feb-2018', 15)
INTO RAW_AVG ("Dayofmonth", "Numbervalue")
VALUES ('28-Feb-2018', 15)
INTO RAW_AVG ("Dayofmonth", "Numbervalue")
VALUES ('01-Mar-2018', 14)
INTO RAW_AVG ("Dayofmonth", "Numbervalue")
VALUES ('02-Mar-2018', 14)
INTO RAW_AVG ("Dayofmonth", "Numbervalue")
VALUES ('03-Mar-2018', 14)
INTO RAW_AVG ("Dayofmonth", "Numbervalue")
VALUES ('04-Mar-2018', 14)
INTO RAW_AVG ("Dayofmonth", "Numbervalue")
VALUES ('05-Mar-2018', 14)
INTO RAW_AVG ("Dayofmonth", "Numbervalue")
VALUES ('06-Mar-2018', 14)
SELECT * FROM dual
;
ОТВЕТ Я получил ожидаемый результат, используя приведенный ниже код (измените код Mr Avi).'6-MAR-18' - это симуляция sysdate.today ()
with Ungroup_AVG AS
(
select lastday,
Round(Avg(totalpermonth) over (order by lastday rows between unbounded preceding and
Current row),6) as Valuespermonth
from (
select
--last_day("Dayofmonth") lastday
CASE WHEN
"Dayofmonth" = '6-MAR-18' AND "Dayofmonth" < last_day('6-MAR-18' ) OR "Dayofmonth">= trunc(last_day('6-MAR-18')-1, 'mm')
THEN
--to_date('6-MAR-18','DD-MON-YY')
"Dayofmonth"
ELSE
last_day("Dayofmonth")
END lastday,
Avg("Numbervalue") totalpermonth
from RAW_AVG
group by last_day("Dayofmonth"), "Dayofmonth") z )
,
Last_dayofMonth as(
select max(lastday) as "DATEA" from Ungroup_AVG group by TRUNC(lastday, 'MM')
)
,AVGZ as(
SELECT lastday,MAX(Valuespermonth) FROM Ungroup_AVG GROUP BY lastday,TRUNC(lastday, 'MM')
)
select M.* from Last_dayofMonth L
JOIN
AVGZ M on L."DATEA"= M.lastday
;