【问题标题】:oracle WHERE condition from prev month上个月的 oracle WHERE 条件
【发布时间】:2018-07-31 08:08:27
【问题描述】:

我正在处理一个需求,其中我的 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'; 

非常感谢任何帮助。

谢谢。

【问题讨论】:

  • 清如泥。您于 2018 年 2 月 20 日发布此信息;那么什么是“上个月”和“本月”?您的样本数据的日期为 2017 年 12 月和 2018 年 1 月。那么 - 您所说的“开始”和“跨越”是什么意思?无论状态如何,每个处方的最早 DATE_IN 和最近 DATE_OUT?如果没有,还有什么?而且,您只需要处方编号,还是所选处方的所有其他信息? GROUP BY 查询会丢失信息(即使在更正后),这样可以吗,还是您真的需要您说需要的输出?
  • 所以你想要的结果有 4 行,你说你得到 all 3 行,但真的想要 2 行? ....困惑....
  • Where format(date_in,'YYYYMM') = format(date_out,'YYYYMM')?如果我理解你只想要那些 datein/dateout 具有相同月份/年份的记录虽然这不会那么“快”我相信有更好的方法来处理这个......

标签: sql oracle where min


【解决方案1】:

使用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 是必要的,因为您的数据模型归一化很差:处方状态应该在单独的表中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-21
    • 1970-01-01
    • 2015-01-17
    相关资源
    最近更新 更多