繁体   English   中英

如何根据日期间隔获取每个 ID 和月份的最新事件列表?

[英]How to get list of latest event per Id and month based on date interval?

我有一个表格,为唯一标识符注册不同的事件日期 - 每个 Id-event-date 组合一行。 根据发生在该 ID 上的事件数量,每个唯一标识符可以有多个日期。 对于单个 ID,没有两个事件在同一日期发生。

首先,我想确定到当前日期已发生超过 7 天的最新事件的唯一 ID。 这是我的工作方法:

WITH latest_event AS
(
SELECT Id,
       date,
       event,
       ROW_NUMBER() OVER(PARTITION BY Id ORDER BY date DESC) AS row_number
  FROM `table`
),

SELECT Id,
       date,
       event,
  FROM latest_stage 
 WHERE row_number = 1
   AND DATE_DIFF(CURRENT_DATE(),date, DAY) > 7
 ORDER BY date

现在我想获得相同的信息,但每月一次,而不仅仅是当前日期。 例如,对于 2021 年和 2022 年的每个月,确定在每个月底之前在过去 7 天内没有发生事件的唯一 ID 的数量。 我很难理解如何在这两年中每个月进行此计算。

我不确定这会奏效。 请自行改进。

with tbl as 
(Select cast(rand()*10 as int64) Id,  date,"E" event from unnest(generate_date_array("2021-01-01","2022-09-23",interval 1 day)) as date)
select *,
date_trunc(date,month)  as month_trunc,
lag(date) over last_date_window as last_date,
ifnull(date_diff(date, lag(date) over last_date_window,day),99) as diff,
max(date) over this_month_window as last_date_of_month
 from tbl
 qualify
  ifnull(date_diff(date, lag(date) over last_date_window,day),99)>7
  and date=max(date) over this_month_window
 window
  last_date_window as (partition by id order by date),
  this_month_window as (partition by date_trunc(date,month))

 
order  by date

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM