多个日期范围中的日期

时间:2014-04-11 13:22:43

标签: sql oracle plsql

在Oracle中,我有两个表,一个表有一个secvicepoint连接标记历史记录,另一个表有读取数据。

SRVCPOINT table

SPID    STARTDATE      STOPDATE       COMPANY
30      13-APR-2001   25-MAR-2002     UKPOWER
30      18-APR-2005   25-MAR-2006     UKPOWER


READING Table

READID SPID    READSTART      READSTOP
16      30     13-JAN-2001    12-APR-2001
23      30     13-APR-2001    25-JAN-2002
24      30     26-JAN-2001    24-MAR-2002
53      30     26-MAR-2002    25-MAR-2003
65      30     13-APR-2004    25-MAR-2004
74      30     20-APR-2005    25-MAR-2006
86      30     25-APR-2006    25-MAR-2007

我想删除在UKPOWER未提供服务期间所做的读取,即READID 16,53,65,86。  我试过READSTART not between STARTDATE and STOPDATE and READTOP not between STARTDATE and STOPDATE, 但它忽略只读16并给出53,65,86。我的意思是它只将日期与第一个日期范围进行比较,而不是与其他日期范围进行比较

任何人都可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

如果我很清楚你需要什么,那就像

(ReadStart BETWEEN StartDate AND StopDate) 
AND (ReadStop BETWEEN StartDate AND StopDate)

对于外面的行,你可以否定相同的

NOT((ReadStart BETWEEN StartDate AND StopDate) 
    AND (ReadStop BETWEEN StartDate AND StopDate))

或者这个

ReadStop < StartDate OR ReadStart > StopDate