You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取表中最新日期及此前7天的数据?SQL语法报错求助

以表中最大日期为基准查询数据的SQL语法修正

原代码依赖系统当前日期(GETDATE())筛选数据,需求改为以表vr.ultrasound中的最大eventdate作为基准,修改后的SQL出现语法错误,以下是问题分析和修正方案:

错误原因

你修改的df_old查询语句中,DATEDIFF(day, eventdate, MAX(eventdate) FROM vr.ultrasound)存在语法错误:聚合函数MAX()不能直接在函数参数中搭配FROM使用,必须用子查询包裹(即(SELECT MAX(eventdate) FROM vr.ultrasound))才能返回单一的最大日期值。

修正后的查询语句

1. 获取最大日期≤1天内的数据(对应df_curr)

SELECT * FROM vr.ultrasound
WHERE DATEDIFF(day, eventdate, (SELECT MAX(eventdate) FROM vr.ultrasound)) <= 1

2. 获取距离最大日期2-8天的数据(对应df_old)

用BETWEEN简化条件,逻辑和原需求一致:

SELECT * FROM vr.ultrasound
WHERE DATEDIFF(day, eventdate, (SELECT MAX(eventdate) FROM vr.ultrasound)) BETWEEN 2 AND 8

如果偏好原有的AND写法,也可以写成:

SELECT * FROM vr.ultrasound
WHERE 
  DATEDIFF(day, eventdate, (SELECT MAX(eventdate) FROM vr.ultrasound)) >= 2
  AND DATEDIFF(day, eventdate, (SELECT MAX(eventdate) FROM vr.ultrasound)) <= 8

对应Python代码

替换原有的pd.read_sql_query参数即可:

# df_curr:最大日期前1天内的数据
df_curr = pd.read_sql_query('SELECT * FROM vr.ultrasound WHERE DATEDIFF(day, eventdate, (SELECT MAX(eventdate) FROM vr.ultrasound)) <= 1', conn)

# df_old:最大日期前2-8天的数据
df_old = pd.read_sql_query('SELECT * FROM vr.ultrasound WHERE DATEDIFF(day, eventdate, (SELECT MAX(eventdate) FROM vr.ultrasound)) BETWEEN 2 AND 8', conn)

补充说明

子查询(SELECT MAX(eventdate) FROM vr.ultrasound)会先执行,返回表中最新的eventdate,再以此为基准计算每条数据的日期差值,确保筛选逻辑完全基于表内数据的最大日期,而非系统当前时间。

内容的提问来源于stack exchange,提问作者Ray92

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 01:36:25