SQL:如果前一个日期超过 1 天前,则获取一系列日期的最小日期

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)

Gor*_*off 5

您可以确定按顺序排列的日期组——这是一个间隙和孤岛问题。也许这会做你想要的:

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()它可以在单个日期处理多个条目。