如何在Oracle SQL中查找过去90天内没有注释的帖子
我必须找到过去90天内所有没有评论的帖子,实际上我找不到解决这个问题的方法 首先,以下是表格:如何在Oracle SQL中查找过去90天内没有注释的帖子,sql,oracle,Sql,Oracle,我必须找到过去90天内所有没有评论的帖子,实际上我找不到解决这个问题的方法 首先,以下是表格: CREATE TABLE POSTS ( POST_ID NUMBER(10) NOT NULL, TITLE VARCHAR2(100) NOT NULL, CONTENT VARCHAR2(2000) NOT NULL, DATE_CREATED DATE NOT NULL, USER_ID NUMBER(10) NOT NULL, CONSTRAINT POSTS_PK
CREATE TABLE POSTS
(
POST_ID NUMBER(10) NOT NULL,
TITLE VARCHAR2(100) NOT NULL,
CONTENT VARCHAR2(2000) NOT NULL,
DATE_CREATED DATE NOT NULL,
USER_ID NUMBER(10) NOT NULL,
CONSTRAINT POSTS_PK PRIMARY KEY (POST_ID),
CONSTRAINT USER_POST_FK
FOREIGN KEY (USER_ID )
REFERENCES USERS(USER_ID )
);
CREATE TABLE COMMENTS
(
COMMENT_ID NUMBER(15) NOT NULL,
POST_ID NUMBER(10) NOT NULL,
DESCRIPTION VARCHAR2(500) NOT NULL,
COMMENT_DATE DATE NOT NULL,
USER_ID NUMBER(10) NOT NULL,
CONSTRAINT COMMENTS_PK PRIMARY KEY (COMMENT_ID),
CONSTRAINT POST_COMMENT_FK
FOREIGN KEY (POST_ID)
REFERENCES POSTS(POST_ID),
CONSTRAINT USER_COMMENT_FK
FOREIGN KEY (USER_ID )
REFERENCES USERS(USER_ID )
);
基本上,我必须找到所有的评论,其中最近的评论是90天或旧的帖子
我该怎么做
我必须找到所有在过去90天没有评论的帖子
这表明不存在
:
select p.*
from posts p
where not exists (select 1
from comments c
where c.post_id = p.post_id and
c.comment_date >= sysdate - interval '90' day
);
注意:您可能希望
trunc(sysdate)
删除时间组件。谢谢!我不得不在最后一行做一些修改,使用“to_DATE(c.comment_DATE,'dd/mm/yyyy')>=to_DATE(SYSDATE,'dd/mm/yyyyy')-90”对我来说很好。在您的数据模型中,comment_DATE
是一个DATE
。应该没有理由转换它。这同样适用于sysdate
@mikejeensensTO_DATE(sysdate,'dd/mm/yyyy')
是一个非常糟糕的主意,但它会产生截断日期的副作用。如果您需要截断它,那么使用trunc(sysdate)
。确切地说,我错了。直接编写“c.comment\u date>=sysdate-90”非常有效。
select post_id -- or: select *
from posts
where post_id not in (
select post_id
from comments
where comment_date >= trunc(sysdate) - 90
)
;