【发布时间】: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 具有相同月份/年份的记录虽然这不会那么“快”我相信有更好的方法来处理这个......