Har*_*y M 3 sql window-functions google-bigquery
我有一个每周发生的数据导入,当它开始时,会持续几天。因此,在日期列中,每个数据导入我都有多个日期。我想获得每次导入的最小日期。这在 SQL 中可能吗?具体来说,在 Google BigQuery 中。例子:
date desired_output
4/25/17 4/25/17
4/26/17 4/25/17
4/27/17 4/25/17
5/2/17 5/2/17
5/3/17 5/2/17
5/10/17 5/10/17
5/16/17 5/16/17
5/17/17 5/16/17
5/23/17 5/23/17
5/24/17 5/23/17
5/30/17 5/30/17
5/31/17 5/30/17
6/5/17 6/5/17
6/6/17 6/6/17
Run Code Online (Sandbox Code Playgroud)
您可以确定按顺序排列的日期组——这是一个间隙和孤岛问题。也许这会做你想要的:
select date,
min(date) over (partition by date_add(date, interval - seqnum_d day)) as desired_output
from (select t.*,
dense_rank() over (order by date) as seqnum_d
from t
) t
Run Code Online (Sandbox Code Playgroud)
日期算术通过减去一个序列来识别日期序列——瞧!结果是一个常数。
注意:这假设日期序列有间隙。
此外,我使用dense_rank()
它可以在单个日期处理多个条目。