BigQuery SELECT PARTITIONED 列上每个月的最后一天

问题描述 投票:0回答:1

我在 BigQuery 中有以下数据。

+---------+---------+------------+
| keyword | qcCount | updateDate |
+---------+---------+------------+

我想从我的表中选择数据,其中 updateDate 是指定期间内每个月的最后一天。

我的目的是通过不过滤该期间的所有日期,而是仅过滤每个月的最后一天来降低查询成本。
例如,如果时间段在 2024-01-01 和 2024-04-01 之间,则仅过滤 2024-01-31、2024-02-29、2024-03-31。

DATE 列,updateDate 是每日分区的,所以我应该只使用常量过滤器。
但是,除了动态过滤,我想不出其他办法了。

下面是我的SQL语句。当然,没有成功。

SELECT keyword, qcCount, updateDate
FROM my_table
WHERE updateDate IN (SELECT LAST_DAY(dt) FROM UNNEST(GENERATE_DATE_ARRAY(DATE(2024,1,1), DATE(2024,4,1))) AS dt);
sql google-bigquery
1个回答
0
投票

选择* 来自我的表 其中 updateDate BETWEEN '2022-01-01' AND '2024-05-30' ---指定期间 AND DAY(updateDate) = DAY(DATEADD(DAY, -1, DATEADD(MONTH, DATEDIFF(MONTH, 0, updateDate) + 1, 0))) --- updateDate 是该月的最后一天

-- Constant Filter:只包含指定时间段内的分区 -- 动态过滤器:仅包含 updateDate 为该月最后一天的行 -- 这在 SQL SERVER 中工作

© www.soinside.com 2019 - 2024. All rights reserved.