提取几天之间的记录

时间:2019-11-21 13:58:34

标签: sql hive

我每天都有一个审核表。所有添加/修改/删除记录均已存储。删除任何记录后,第二天就不会显示。像下面这样。

Date    records
----    --------
15th     100    
16th      102      - Pickup all records, between 15 and 16, which are not in 16th
17th     110    - Pickup all records, between 16 and 17, which are not in 17th
18th     150    - Pickup all records, between 17 and 18, which are not in 18th
.. So on..

这是一个审核表,该表在前一天已删除记录,但今天不存在。我需要提取日期之间的所有已删除记录。 但是我不想对日期进行硬编码,相反,它应该可以从日期到Today()

如何在单个SQL查询中实现此目标?我尝试使用“联盟”功能,但带有硬编码日期。到目前为止,有什么方法可以作为通用查询实现。

1 个答案:

答案 0 :(得分:0)

您可以使用两个级别的聚合。第一个获取每个ID的最长日期。次日删除的第二条记录:

select max_date + interval 1 day, count(*)
from (select a.id, max(date) as max_date
      from audit a
      group by a.id
     ) t
group by max_date
order by max_date;

您可能希望where子句将最大日期限制为数据中最大日期之前的日期(否则所有内容看起来都将在第二天被删除)。

另一种方法使用lead()

select date + 1, count(*)
from (select a.*,
             lead(date) over (partition by id order by date) as next_date
      from audit a
     ) t
where next_date <> date_add(date, INTERVAL 1 DAY) or next_date is null
group by date
order by date;

如果记录可以恢复,而您仍然希望在记录消失时将其视为已删除,则这是更好的方法。

Here是db <>小提琴。