【发布时间】:2021-08-12 15:00:51
【问题描述】:
在 BigQuery 中,给定一个日期间隔表,我如何找到它们的并集与单个感兴趣的日期间隔的重叠?
例如,给定一个日期间隔表(称此表 A)为:
start_date end_date
2021-02-01 2021-05-01
2021-04-01 2021-07-01
2020-12-01 2021-03-01
2021-09-01 2021-12-01
而感兴趣的单个日期间隔(称为此表 B)为:
start_date end_date
2021-01-01 2021-11-01
我想计算 A 中的间隔与 B 中的间隔之间的重叠为 8 个月。
当 A 的区间不相交时,我可以用以下方法解决这个问题:
SELECT
SUM(GREATEST(0, DATE_DIFF(LEAST(B.end_date, A.end_date),
GREATEST(B.start_date,A.start_date), MONTH)))
AS months_overlap
FROM
A, B
问题出现在 A 中的日期间隔相互重叠时,如上例所示,在这种情况下,上面的代码双重计算 A 中的重叠间隔,即它将返回 10 个月上面的例子。
关于如何在不重复计算的情况下计算这些间隔的重叠有什么建议吗?我曾考虑将 Lags 引入日期差异函数,但我做错了。
【问题讨论】:
标签: sql google-bigquery