2017-10-09 163 views
2

我有一个每周都会发生的数据导入,并且它在启动时会持续几天。因此,在日期列中,每个数据导入都有多个日期。我想获得每次进口的最短日期。这在SQL中可能吗?具体来说,在Google BigQuery中。示例:SQL:如果上一次日期超过1天,则获取一系列日期分区的最短日期

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 
+0

你有任何可以识别属于同一导入行的字段吗?或整个表是一个导入? –

+0

不幸的是,我没有。展望未来,我们正在添加此字段,但我想对历史数据进行一些分析,而不必手动重命名日期。 –

+0

那么你打算如何区分不同的进口?你应该为此提供一些逻辑。并用预期输出显示一些简化的数据示例。只要你有它,它应该是超级简单然后 –

回答

2

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

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 

日期算术通过减去一个序列来标识日期序列 - 瞧!结果是一个常数。

注意:这假定日期序列有差距。

此外,我使用dense_rank(),因此它可以在一个日期处理多个条目。

+0

这是完美的!非常感谢!井井有条! –

相关问题