Sql BigQuery-折叠具有连续日期的行

Sql BigQuery-折叠具有连续日期的行,sql,google-bigquery,olap,Sql,Google Bigquery,Olap,我有一张包含销售目标的表格。它们通常每月设置一次,但每天和市场一起加载到表中。例如,如果1月份的英国目标为1550,则将加载31行(1月份每天一行),每个行的目标为50(1550/31天) 我想把它折叠起来,这样每一行都有一个dateFrom和dateTo列,以减少加载数据的工作量和查询数据的时间/成本 我通过对市场和目标进行分组,并将最大和最小日期以及目标的总和相加来实现这一点: SELECT MIN(date) AS dateFrom, MAX(date) AS dateTo,

我有一张包含销售目标的表格。它们通常每月设置一次,但每天和市场一起加载到表中。例如,如果1月份的英国目标为1550,则将加载31行(1月份每天一行),每个行的目标为50(1550/31天)

我想把它折叠起来,这样每一行都有一个
dateFrom
dateTo
列,以减少加载数据的工作量和查询数据的时间/成本

我通过对市场和目标进行分组,并将最大和最小日期以及目标的总和相加来实现这一点:

SELECT
  MIN(date) AS dateFrom,
  MAX(date) AS dateTo,
  Market,
  target AS dailyTarget,
  SUM(target) AS target
FROM targets
GROUP BY Market, dailyTarget
ORDER BY dateFrom
我预计会有三行,但有一个问题——同一个市场和目标的月份被另一个目标的月份分割,我们会得到重叠的行。在上面的例子中,一月和三月的每日目标都是50,而二月的目标是25

我认为解决方案在于使用窗口只将日期与前一行日期相邻的行分组,但我不知道如何实现这一点


谢谢你的帮助

下面是BigQuery标准SQL

#standardSQL
SELECT
  MIN(date) AS dateFrom,
  MAX(date) AS dateTo,
  Market,
  target AS dailyTarget,
  SUM(target) AS target
FROM `project.dataset.targets`
GROUP BY Market, dailyTarget, DATE_TRUNC(date, MONTH)
ORDER BY dateFrom

如您所见,您只需将
日期\u TRUNC(日期,月份)
添加到
分组依据

这是一个缺口和孤岛问题。您可以使用以下方法获取范围:

select market, min(date), max(date), target
from (select t.*,
             row_number() over (partition by market, target order by date) as seqnum_t,
             row_number() OVER (partition by market order by date) as seqnum
      from targets t
     ) t
group by market, target, (seqnum - seqnum_t)

你试过了吗?如果合适,请随意投票/接受
select market, min(date), max(date), target
from (select t.*,
             row_number() over (partition by market, target order by date) as seqnum_t,
             row_number() OVER (partition by market order by date) as seqnum
      from targets t
     ) t
group by market, target, (seqnum - seqnum_t)