我正在制定一项要求,我的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';
非常感谢任何帮助。
感谢。
答案 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
是必要的,因为您的数据模型规范不合理:处方状态应该在一个单独的表中。