按日期分区一段时间sql bigquery
数据必须由ID以及PageView_date分区。因此,对于每个相应的ID-代码,应查找“ edited_date”列中可用的最新日期
不迟于pageview_date
字段本身。但是,它必须查找pageview_date
之前可用的所有值,不仅是每天的记录。 这是数据和代码:
with sample as (
select 'a' as id, DATE('2022-02-27') as pageview_date, DATE('2022-01-28') as edited_date
UNION ALL
select 'a' as id, DATE('2022-02-27') as pageview_date, DATE('2022-03-01') as edited_date
UNION ALL
select 'a' as id, DATE('2022-03-01') as pageview_date, DATE('2022-03-28') as edited_date
UNION ALL
select 'a' as id, DATE('2022-03-01') as pageview_date, DATE('2022-01-28') as edited_date
UNION ALL
select 'a' as id, DATE('2022-03-05') as pageview_date, DATE('2017-02-28') as edited_date
)
SELECT
id,
pageview_date,
MAX(IF(edited_date <= pageview_date, edited_date, null)) OVER (PARTITION BY pageview_date, id) as new_edited_date
FROM sample
所需的输出是:
id pageview_date new_edited_date
a 2022-02-27 2022-01-28
a 2022-02-27 2022-01-28
a 2022-03-01 2022-03-01
a 2022-03-01 2022-03-01
a 2022-03-05 2022-03-01
Data has to be partitioned by id as well as by pageview_date. So for each corresponding id - code should look for the latest date available in the column edited_date
that is no later than pageview_date
field itself. But it has to look for all values that are available before the pageview_date
NOT ONLY for what the records are for each given day.
Here is data and the code:
with sample as (
select 'a' as id, DATE('2022-02-27') as pageview_date, DATE('2022-01-28') as edited_date
UNION ALL
select 'a' as id, DATE('2022-02-27') as pageview_date, DATE('2022-03-01') as edited_date
UNION ALL
select 'a' as id, DATE('2022-03-01') as pageview_date, DATE('2022-03-28') as edited_date
UNION ALL
select 'a' as id, DATE('2022-03-01') as pageview_date, DATE('2022-01-28') as edited_date
UNION ALL
select 'a' as id, DATE('2022-03-05') as pageview_date, DATE('2017-02-28') as edited_date
)
SELECT
id,
pageview_date,
MAX(IF(edited_date <= pageview_date, edited_date, null)) OVER (PARTITION BY pageview_date, id) as new_edited_date
FROM sample
Desired output is:
id pageview_date new_edited_date
a 2022-02-27 2022-01-28
a 2022-02-27 2022-01-28
a 2022-03-01 2022-03-01
a 2022-03-01 2022-03-01
a 2022-03-05 2022-03-01
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
Output:
我认为在这里有点交叉加入的子查询可能会更好。
I think bit of cross-join and corelated subquery may work better here.