SSRS动态日期实现:获取上周患者预约记录的SQL查询问题
解决动态日期获取上周预约数据的方案
你遇到的TODAY/CURRENT_DATE报错,核心原因是不同数据库的日期函数差异,以下是针对常见数据库的适配写法,同时明确两种“上周数据”的范围逻辑:
1. 若使用SQL Server(Excel通过ODBC连接场景)
方案A:获取完整上周周期(周一至周日,以周一为周起始)
SELECT PM.vwApptDetail.Patient_Last_Name ,PM.vwApptDetail.Patient_First_Name ,PM.vwApptDetail.Patient_DOB ,PM.vwApptDetail.Appointment_DateTime ,PM.vwApptDetail.Appt_Type_Desc ,PM.vwApptDetail.Resource_Desc ,PM.vwApptDetail.Status FROM PM.vwApptDetail WHERE PM.vwApptDetail.Appointment_DateTime >= DATEADD(week, DATEDIFF(week, 0, GETDATE()) - 1, 0) AND PM.vwApptDetail.Appointment_DateTime < DATEADD(week, DATEDIFF(week, 0, GETDATE()), 0)
方案B:单纯获取当前日期前7天的数据
SELECT PM.vwApptDetail.Patient_Last_Name ,PM.vwApptDetail.Patient_First_Name ,PM.vwApptDetail.Patient_DOB ,PM.vwApptDetail.Appointment_DateTime ,PM.vwApptDetail.Appt_Type_Desc ,PM.vwApptDetail.Resource_Desc ,PM.vwApptDetail.Status FROM PM.vwApptDetail WHERE PM.vwApptDetail.Appointment_DateTime >= DATEADD(day, -7, GETDATE())
2. 若使用MySQL/MariaDB
方案A:完整上周周期(周一至周日)
SELECT PM.vwApptDetail.Patient_Last_Name ,PM.vwApptDetail.Patient_First_Name ,PM.vwApptDetail.Patient_DOB ,PM.vwApptDetail.Appointment_DateTime ,PM.vwApptDetail.Appt_Type_Desc ,PM.vwApptDetail.Resource_Desc ,PM.vwApptDetail.Status FROM PM.vwApptDetail WHERE Appointment_DateTime >= DATE_SUB(CURDATE(), INTERVAL WEEKDAY(CURDATE()) + 7 DAY) AND Appointment_DateTime < DATE_SUB(CURDATE(), INTERVAL WEEKDAY(CURDATE()) DAY)
方案B:当前日期前7天数据
SELECT PM.vwApptDetail.Patient_Last_Name ,PM.vwApptDetail.Patient_First_Name ,PM.vwApptDetail.Patient_DOB ,PM.vwApptDetail.Appointment_DateTime ,PM.vwApptDetail.Appt_Type_Desc ,PM.vwApptDetail.Resource_Desc ,PM.vwApptDetail.Status FROM PM.vwApptDetail WHERE Appointment_DateTime >= DATE_SUB(NOW(), INTERVAL 7 DAY)
3. 若使用Oracle
方案A:完整上周周期(周一至周日)
SELECT PM.vwApptDetail.Patient_Last_Name ,PM.vwApptDetail.Patient_First_Name ,PM.vwApptDetail.Patient_DOB ,PM.vwApptDetail.Appointment_DateTime ,PM.vwApptDetail.Appt_Type_Desc ,PM.vwApptDetail.Resource_Desc ,PM.vwApptDetail.Status FROM PM.vwApptDetail WHERE Appointment_DateTime >= TRUNC(SYSDATE, 'IW') - 7 AND Appointment_DateTime < TRUNC(SYSDATE, 'IW')
方案B:当前日期前7天数据
SELECT PM.vwApptDetail.Patient_Last_Name ,PM.vwApptDetail.Patient_First_Name ,PM.vwApptDetail.Patient_DOB ,PM.vwApptDetail.Appointment_DateTime ,PM.vwApptDetail.Appt_Type_Desc ,PM.vwApptDetail.Resource_Desc ,PM.vwApptDetail.Status FROM PM.vwApptDetail WHERE Appointment_DateTime >= SYSDATE - 7
额外提示
如果是在Excel内置的SQL查询功能中操作,务必使用对应数据库的原生日期函数,不要混用Excel公式,避免语法冲突。
内容的提问来源于stack exchange,提问作者Soledad B
相关产品推荐
相关产品推荐

