SQL中实现每周自动获取近60天最新数据的动态日期语法咨询
SQL中实现每周自动获取近60天最新数据的动态日期语法咨询
嗨,我明白你的困扰啦——用固定日期的话,每周跑查询只会拿到同一个时间段的数据,根本没法自动更新到最新的60天区间对吧?别担心,咱们用动态日期函数就能解决这个问题,不同数据库的写法略有差异,我给你分情况说明:
核心思路
不要写死起始和结束日期的字符串,而是用数据库自带的日期函数动态计算区间:起始日期为「最新日期往前推60天」,结束日期为「最新可用日期」(一般是当前系统日期,或者你表中最新的记录日期)。
不同数据库的具体写法
1. MySQL/MariaDB
- 如果结束日期取当前系统日期:
WHERE date_dd BETWEEN DATE_SUB(CURDATE(), INTERVAL 60 DAY) AND CURDATE()
- 如果结束日期取表中
date_dd字段的最新值(比如表中数据更新滞后于系统日期):
WHERE date_dd BETWEEN DATE_SUB((SELECT MAX(date_dd) FROM your_table), INTERVAL 60 DAY) AND (SELECT MAX(date_dd) FROM your_table)
2. PostgreSQL
- 如果结束日期取当前系统日期:
WHERE date_dd BETWEEN CURRENT_DATE - INTERVAL '60 days' AND CURRENT_DATE
- 如果结束日期取表中
date_dd字段的最新值:
WHERE date_dd BETWEEN (SELECT MAX(date_dd) FROM your_table) - INTERVAL '60 days' AND (SELECT MAX(date_dd) FROM your_table)
3. SQL Server
- 如果结束日期取当前系统日期(注意:
GETDATE()会返回带时间的datetime,若date_dd是纯日期类型,建议转成DATE避免时间过滤问题):
-- 带时间的写法 WHERE date_dd BETWEEN DATEADD(day, -60, GETDATE()) AND GETDATE() -- 纯日期的写法(更精准) WHERE date_dd BETWEEN DATEADD(day, -60, CAST(GETDATE() AS DATE)) AND CAST(GETDATE() AS DATE)
- 如果结束日期取表中
date_dd字段的最新值:
WHERE date_dd BETWEEN DATEADD(day, -60, (SELECT MAX(date_dd) FROM your_table)) AND (SELECT MAX(date_dd) FROM your_table)
小提示
如果你不确定自己用的是哪种数据库,可以先试试通用的逻辑:用「当前日期/最新记录日期 - 60天」作为起始条件,这样每周执行查询时,区间都会自动更新,拿到的永远是最近60天的最新数据~
备注:内容来源于stack exchange,提问作者Aita525
相关产品推荐
相关产品推荐

