AWS Athena如何动态获取最近两个日历年的数据?
动态获取当前年份及上一年份的日历年数据解决方案
你的问题在于原语句是从当前日期向前回溯两年的区间,而非完整的上一年和当前日历年。以下是不同数据库的正确实现方式:
PostgreSQL
方式1:基于日期范围(推荐,可利用索引)
MYDATE >= date_trunc('year', current_date) - interval '1 year' AND MYDATE < date_trunc('year', current_date) + interval '1 year'
date_trunc('year', current_date)会返回当前年份的第一天(如2024-01-01),减1年得到上一年的起始日,加1年得到下一年的起始日,这样就能精准覆盖上一年和当前年的所有数据。
方式2:提取年份直接比较
EXTRACT(YEAR FROM MYDATE) IN (EXTRACT(YEAR FROM current_date) - 1, EXTRACT(YEAR FROM current_date))
MySQL
方式1:基于日期范围
MYDATE >= STR_TO_DATE(CONCAT(YEAR(CURDATE()) - 1, '-01-01'), '%Y-%m-%d') AND MYDATE < STR_TO_DATE(CONCAT(YEAR(CURDATE()) + 1, '-01-01'), '%Y-%m-%d')
方式2:提取年份直接比较
YEAR(MYDATE) IN (YEAR(CURDATE()) - 1, YEAR(CURDATE()))
SQL Server
方式1:基于日期范围
MYDATE >= DATEFROMPARTS(YEAR(GETDATE()) - 1, 1, 1) AND MYDATE < DATEFROMPARTS(YEAR(GETDATE()) + 1, 1, 1)
方式2:提取年份直接比较
YEAR(MYDATE) IN (YEAR(GETDATE()) - 1, YEAR(GETDATE()))
注意:如果MYDATE字段有索引,优先使用日期范围的写法,性能更优;提取年份的写法更简洁直观,适合无索引或数据量较小的场景。
内容的提问来源于stack exchange,提问作者sawillson11
相关产品推荐
相关产品推荐

