我有一个如下表。我希望每个月都能得到一个差额(减去当月最后一天的值减去当月的第一天)。
========================
Date | type| value
------------------------
01-01-2019 | A | 10
01-02-2019 | A | 30
31-01-2019 | A | 40
Expected output
A -> 30
您可以使用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);
尝试此查询:
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