Google bigquery 与日期_SUB和函数之间的问题

Google bigquery 与日期_SUB和函数之间的问题,google-bigquery,Google Bigquery,我在创建参数化查询时遇到了这个问题;然后,查询的目的是根据作为变量传递的日期提取过去5个月(不包括当前月份)的数据。表A的基本表模式如下: as_of_date Y X 2019-12-31 1 AB 2019-11-30 2 CD 2019-10-31 3 EF 2019-09-30 4 GH 2019-08-31 5 MN 2019-07-31 6 XYZ 2020-01-31 7 PQR 2020-02-29 8 AAA 以下是我编

我在创建参数化查询时遇到了这个问题;然后,查询的目的是根据作为变量传递的日期提取过去5个月(不包括当前月份)的数据。表A的基本表模式如下:

as_of_date  Y   X
2019-12-31  1   AB
2019-11-30  2   CD
2019-10-31  3   EF 
2019-09-30  4   GH
2019-08-31  5   MN
2019-07-31  6   XYZ
2020-01-31  7   PQR
2020-02-29  8   AAA
以下是我编写的查询:

WITH
date
AS
(
SELECT CAST("2020-02-29" AS Date) as run_date
)

SELECT DISTINCT CAST(a.as_of_date AS DATE) as_of_date,
FROM  A as a
WHERE CAST(a.as_of_date AS DATE) BETWEEN DATE_SUB((SELECT run_date FROM date), INTERVAL 5 Month) AND DATE_SUB((SELECT run_date FROM date), INTERVAL 1 Month) 
当run_date设置为“2020-01-31”并返回过去5个月的数据(即12月、11月、10月、9月和8月)时,此查询运行正常。但当日期设置为“2020-02-29”时失败,它只返回4个月的数据。

简单的“修复”是添加
日期(…,月)
,如下例所示

SELECT DISTINCT CAST(a.as_of_date AS DATE) as_of_date,
FROM `project.dataset.tableA` AS a
WHERE DATE_TRUNC(CAST(a.as_of_date AS DATE), MONTH) 
  BETWEEN DATE_TRUNC(DATE_SUB((SELECT run_date FROM date_cte), INTERVAL 5 Month), MONTH) 
      AND DATE_TRUNC(DATE_SUB((SELECT run_date FROM date_cte), INTERVAL 1 Month), MONTH)  

很高兴它对你有用。请考虑投票表决。