查询历史数据-新条目/已删除条目

时间:2020-04-23 09:52:44

标签: sql sql-server view

有人可以在查询中提供建议,以获取每个期间新条目和已删除条目的总和吗?

我有一个表,其中包含这样的历史数据(在GUID + Date上使用PKI) 表1

GUID       Date          Category
----------------------------------
00001   2020-04-01         A  
00002   2020-04-01         B
00003   2020-04-01         C

00001   2020-04-02         A
00002   2020-04-02         B
00003   2020-04-02         C
00004   2020-04-02         A

00001   2020-04-03         A
00002   2020-04-03         B
00003   2020-04-03         C
00004   2020-04-03         A
00007   2020-04-03         A
00005   2020-04-03         B

00001   2020-04-04         A
00002   2020-04-04         B
00004   2020-04-04         A
00007   2020-04-04         A
00005   2020-04-04         B

因此,我需要获取在添加和删除期间的guid的总和(该月的最小日期)。

在此示例中为

表2

Status    Period        Category  Amount
----------------------------------------
  New     2020-04-01        A        2
  New     2020-04-01        B        1
Removed   2020-04-01        C        1 

感谢您的建议和帮助。

1 个答案:

答案 0 :(得分:0)

如果我的理解正确,您想比较每个GUID的第一次和最后一次出现。我假设类别在一个月内没有变化。

如果正确,则可以使用聚合:

select (case when max_date < data_max_date then 'removed'
             when min_date > data_min_date then 'new'
        end) as status,
       category, count(*)
from (select guid, category, min(date) as min_date, max(date) as max_date,
             min(min(date)) over () as data_min_date,
             max(max(date)) over () as data_max_date
      from t
      group by guid, category
     ) gc
where min_date <> data_min_date or max_date <> data_max_date
group by category;