技术求助:基于DATE_REQUEST列的去年同期365天时间过滤调整
调整SQL日期过滤条件以获取指定时间段数据
针对你的需求——筛选UTC时区TIMESTAMP类型的DATE_REQUEST列,获取2021-04-20 至 2022-04-19之间的数据(对应当前日期2023-04-20时,去年今日之前365天的范围),以下是调整后的SQL语句,核心修改WHERE子句的日期过滤逻辑:
SELECT FLIGHT_MONTH, IATA_OD, SERV_DEP_COUNTRY, SERV_ARR_COUNTRY, SUM(max_quantity) AS PAX, SUM(sum_price) AS FPPRICE FROM ( SELECT DATE_TRUNC(DATE(t.DATE_DEPARTURE), MONTH) AS FLIGHT_MONTH, t.id_pnr AS PNR, CONCAT(t.IATA_CODE_SERVICE_DEP_CITY, "-", t.IATA_CODE_SERVICE_ARR_CITY) AS IATA_OD, t.DESC_SERVICE_DEP_COUNT AS SERV_DEP_COUNTRY, t.DESC_SERVICE_ARR_COUNT AS SERV_ARR_COUNTRY, MAX(t.ID_PAX_RANGE) max_quantity, SUM(t.FLIGHTPROVIDERPRICE) sum_price FROM `DATA_TABLE` t WHERE -- 筛选UTC时间在2021-04-20 00:00:00 至 2022-04-19 23:59:59之间的数据 DATE_REQUEST >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 2 YEAR) AND DATE_REQUEST < TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 YEAR) GROUP BY FLIGHT_MONTH, PNR, IATA_OD, SERV_DEP_COUNTRY, SERV_ARR_COUNTRY ) t GROUP BY FLIGHT_MONTH, IATA_OD, SERV_DEP_COUNTRY, SERV_ARR_COUNTRY ORDER BY FLIGHT_MONTH, IATA_OD, SERV_DEP_COUNTRY, SERV_ARR_COUNTRY
过滤逻辑说明
TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 2 YEAR):基于当前UTC时间往前推2年,得到时间段的起始点(2021-04-20 00:00:00 UTC)。DATE_REQUEST < TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 YEAR):基于当前UTC时间往前推1年(2022-04-20 00:00:00 UTC),用小于这个时间点的条件,确保只包含到2022-04-19的最后一秒数据,避免误纳入2022-04-20的记录。
如果更倾向于基于日期而非时间戳的直观比较,也可以将DATE_REQUEST转换为UTC日期后筛选:
WHERE DATE(DATE_REQUEST) BETWEEN DATE_SUB(CURRENT_DATE(), INTERVAL 2 YEAR) AND DATE_SUB(CURRENT_DATE(), INTERVAL 1 YEAR + 1 DAY)
这个写法会直接匹配2021-04-20至2022-04-19的所有日期,与需求完全对应。
内容的提问来源于stack exchange,提问作者Anders Gustavsson
相关产品推荐
相关产品推荐

