获得每个月数据的差异

问题描述 投票:0回答:2

我有一个如下表。我希望每个月都能得到一个差额(减去当月最后一天的值减去当月的第一天)。

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

Expected output
A -> 30
sql sybase sybase-ase
2个回答
0
投票

您可以使用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
投票

尝试此查询:

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 
© www.soinside.com 2019 - 2024. All rights reserved.