如何获取表中最新日期及此前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
相关产品推荐
相关产品推荐

