【发布时间】:2018-05-16 05:47:18
【问题描述】:
如果日期在日期范围内,我试图从表中排除数据。如果这是一个单一的日期,那就很简单了:
SELECT * FROM XYZ WHERE XYZ.DATE NOT BETWEEN DATE1 AND DATE2;
但是对于这个特定的要求,我有很多日期我想用单独的表(EXCLUDE_THESE_DATES)进行比较:
START_DATE END_DATE VALUE_NAME
06-NOV-17 13:16:00 06-NOV-17 13:17:00 NAMEINQUESTION
06-NOV-17 16:34:00 17-NOV-17 16:13:00 NAMEINQUESTION
13-NOV-17 18:05:00 13-NOV-17 18:10:00 NAMEINQUESTION
13-NOV-17 20:02:00 13-NOV-17 20:03:00 NAMEINQUESTION
13-NOV-17 20:05:00 13-NOV-17 20:20:00 NAMEINQUESTION
15-NOV-17 15:14:00 15-NOV-17 15:18:00 NAMEINQUESTION
我能够获得这些日期范围内的所有值(如下),但似乎没有什么能让我得到我真正想要的东西(日期不在这些日期范围内)。
SELECT
FLD.VALUE, FLD.FILTERDATE, ETED.START_DATE, ETED.END_DATE
FROM
FULL_LIST_OF_DATES FLD,
EXCLUDE_THESE_DATES ETD
WHERE FLD.VALUE_NAME = ETD.VALUE_NAME
AND FLD.VALUE_TYPE_ID = 1007
AND FLD.FILTERDATE BETWEEN '01-OCT-17 00:00:00' AND '01-APR-18
00:00:00'
AND (FLD.FILTERDATE >= ETED.START_DATE
AND FLD.FILTERDATE <= ETED.END_DATE)
AND FLD.VALUE_NAME = 'NAMEINQUESTION'
任何帮助将不胜感激!
编辑: 基于反馈的结果。 16:34:51 不应该出现,因为它也在 06-NOV-17 16:34:00 到 17-NOV-17 16:13:00。
VALUE FILTERDATE START_DATE END_DATE
480.703461 06-NOV-17 16:34:51 28-NOV-17 13:26:00 29-NOV-17 23:36:00
480.703461 06-NOV-17 16:34:51 13-NOV-17 18:05:00 13-NOV-17 18:10:00
480.703461 06-NOV-17 16:34:51 06-NOV-17 13:16:00 06-NOV-17 13:17:00
480.703461 06-NOV-17 16:34:51 13-NOV-17 20:05:00 13-NOV-17 20:20:00
480.703461 06-NOV-17 16:34:51 15-NOV-17 15:14:00 15-NOV-17 15:18:00
480.703461 06-NOV-17 16:34:51 28-NOV-17 13:10:00 28-NOV-17 13:13:00
480.703461 06-NOV-17 16:34:51 13-NOV-17 20:02:00 13-NOV-17 20:03:00
483.04837 06-NOV-17 16:35:19 28-NOV-17 13:26:00 29-NOV-17 23:36:00
483.04837 06-NOV-17 16:35:19 13-NOV-17 18:05:00 13-NOV-17 18:10:00
483.04837 06-NOV-17 16:35:19 06-NOV-17 13:16:00 06-NOV-17 13:17:00
483.04837 06-NOV-17 16:35:19 13-NOV-17 20:05:00 13-NOV-17 20:20:00
483.04837 06-NOV-17 16:35:19 15-NOV-17 15:14:00 15-NOV-17 15:18:00
483.04837 06-NOV-17 16:35:19 28-NOV-17 13:10:00 28-NOV-17 13:13:00
【问题讨论】:
标签: sql oracle join not-exists