如何在Oracle SQL中查找过去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

我必须找到过去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 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
@mikejeensens
TO_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
                      )
;