SQL:如果前一个日期超过 1 天前,则获取一系列日期分区的最小日期
SQL: Getting the min date of a series of dates partitioning by if previous date is more than 1 day ago
我每周都会进行一次数据导入,当它开始时,会持续几天。结果,在日期列中,我为每个数据导入设置了多个日期。我想获取每次导入的最短日期。这在 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
您可以识别按顺序排列的日期组——这是一个间隔和孤岛问题。也许这会做你想要的:
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()
,因此它可以在一个日期处理多个条目。
我每周都会进行一次数据导入,当它开始时,会持续几天。结果,在日期列中,我为每个数据导入设置了多个日期。我想获取每次导入的最短日期。这在 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
您可以识别按顺序排列的日期组——这是一个间隔和孤岛问题。也许这会做你想要的:
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()
,因此它可以在一个日期处理多个条目。