Получить разницу для каждого месяца данных - PullRequest
0 голосов
/ 21 апреля 2020

У меня есть стол, как показано ниже. Я хочу получить разницу для каждого месяца (вычтите значение последнего дня месяца по первой дате месяца).

========================
Date       | type| value
------------------------
01-01-2019 | A   | 10
01-02-2019 | A   | 30
31-01-2019 | A   | 40

Expected output
A -> 30

Ответы [ 2 ]

0 голосов
/ 21 апреля 2020

Вы можете использовать row_number():

select type, year(date), month(date),
       (max(case when seqnum_desc = 1 then value end) -
        max(case when seqnum_asc = 1 then value end) 
       ) as month_diff
from (select t.*,
             row_number() over (partition by type, year(date), month(date) order by date) as seqnum_asc,
             row_number() over (partition by type, year(date), month(date) order by date desc) as seqnum_desc
      from t
     ) t
group by type, year(date), month(date);

Если вы знаете, какие значения увеличиваются (или не уменьшаются), то вы можете использовать агрегирование:

select type, year(date), month(date), max(value) - min(value)
from t
group by type, year(date), month(date);
0 голосов
/ 21 апреля 2020

попробуйте этот запрос:

select diff
from
(
select abs(value-
    (select value 
    from yourtable as a2 
    where a2.date=EOMONTH(a1.date))) diff
from yourtable as a1
)
where diff is not null 
...