общее количество% отклонений по месяцам в oracle - PullRequest
1 голос
/ 07 марта 2020

мне нужно 3 столбца

count   period    variance    
50      JAN        0%
100     FEB        100%

я использую этот запрос

SELECT COUNT(DISTINCT sale) AS cnt, TO_CHAR("date", 'MON-YYYY') AS Period
  FROM BETA_MAN_POS_mth
 WHERE "date" BETWEEN date'2020-01-01' AND date'2020-01-31'
 GROUP BY TO_CHAR("date", 'MON-YYYY')
UNION ALL
SELECT COUNT(DISTINCT sale) AS cnt, TO_CHAR("date", 'MON-YYYY') AS Period
  FROM BETA_MAN_POS_mth
 WHERE "date" BETWEEN date'2020-02-01' AND date'2020-02-28'
 GROUP BY TO_CHAR("date", 'MON-YYYY')

как найти% diff для месяца в новом столбце под названием "дисперсия"

1 Ответ

0 голосов
/ 07 марта 2020

Вы можете использовать функцию lag() analyti c:

WITH b2 AS
(
SELECT TO_CHAR("date",'YYYYMM') AS period0, -- in order to use for ordering
       TO_CHAR("date",'YYYY-MON') AS period, -- in order to display month abbreviations
       COUNT(DISTINCT sale) As cnt
  FROM BETA_MAN_POS_mth
GROUP BY TO_CHAR("date",'YYYYMM'), TO_CHAR("date",'YYYY-MON') 
)
SELECT cnt ,period, 
       100*(cnt-lag(cnt,1,cnt) over (order by period0))
       /lag(cnt,1,cnt) over (order by period0)
       as "variance(%)"
  FROM b2
 ORDER BY period0

, чтобы получить значение отдельного столбца для предыдущей строки.

Демонстрация

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...