在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。我的意思是它只将日期与第一个日期范围进行比较,而不是与其他日期范围进行比较
任何人都可以帮忙吗?
答案 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