oracle WHERE条件来自上个月

时间:2018-02-20 21:00:02

标签: sql oracle where min

我正在制定一项要求,我的Oracle查询应该忽略上个月开始并持续到本月的处方。

Prescription# Date_In     Date_Out     STATUS

123456        02-JAN-2018 03-JAN-2018  Pre-Verification   
123456        02-JAN-2018 03-JAN-2018  Verification  
234567        31-DEC-2017 02-JAN-2018  Pre-Verification  
234567        31-DEC-2017 02-JAN-2018  Pre-Verification  
234567        31-DEC-2017 02-JAN-2018  Verification  
345678        01-JAN-2018 02-JAN-2018  Pre-Verification  
345678        01-JAN-2018 02-JAN-2018  Verification

期望的结果:

Prescription# Date_In     Date_Out     Status

123456        02-JAN-2018 03-JAN-2018  Pre-Verification  
123456        02-JAN-2018 03-JAN-2018  Verification  
345678        01-JAN-2018 02-JAN-2018  Pre-Verification  
345678        01-JAN-2018 02-JAN-2018  Verification

我的SQL(它会带回所有三行,但理想情况下它应该只带回来 2行)

SELECT PRESCRIPTION#,DATE_IN,DATE_OUT  
FROM PRESCRIPTION_TABLE  
WHERE DATE_IN >= '01-JAN-2018'  
AND DATE_OUT <= '31-JAN-2018';

我也尝试了,但这也带回了所有3个处方。

SELECT PRESCRIPTION#,DATE_IN,DATE_OUT  
FROM PRESCRIPTION_TABLE  
GROUP BY PRESCRIPTION#,DATE_OUT    
HAVING MIN(DATE_IN) > '01-JAN-2018'; 

非常感谢任何帮助。

感谢。

1 个答案:

答案 0 :(得分:0)

使用MM掩码截断日期会给出该月的第一天。将-1作为add_months()的第二个参数传递给我们上个月。 last_day()提供该月的最后一天。使用这三个功能将为您提供上个月开始和结束的所有处方:

select distinct prescription#,date_in,date_out  
from prescription_table  
where date_in >= add_months(trunc(sysdate,'MM'), -1)   
and date_out <= last_day(add_months(trunc(sysdate,'MM'), -1)) ;

distinct是必要的,因为您的数据模型规范不合理:处方状态应该在一个单独的表中。