Sql 返回超出范围结果的日期分隔符

Sql 返回超出范围结果的日期分隔符,sql,postgresql,Sql,Postgresql,我有一个相当复杂的问题。其中一部分用where声明进行界定,排除出院日期大于90天前的结果 原始表格中的日期格式为2017-09-22 选择如下所示的值 to_char("public".visit.visit_admit_date, 'MMDDYYYY') AS "Visit or Admit Date", to_char("public".visit.visit_disch_date, 'MMDDYYYY') AS "Discharge Date", WHERE exists ( SE

我有一个相当复杂的问题。其中一部分用where声明进行界定,排除出院日期大于90天前的结果

原始表格中的日期格式为2017-09-22

选择如下所示的值

to_char("public".visit.visit_admit_date, 'MMDDYYYY') AS "Visit or Admit Date",
to_char("public".visit.visit_disch_date, 'MMDDYYYY') AS "Discharge Date",

WHERE

 exists ( SELECT distinct on ("public".visit.visit_id)  "public".procedure_group_cpt_code.pgrpcpt_code::text  
          FROM "public".visit 
          FULL OUTER JOIN "public".patient_procedure 
            ON "public".visit.visit_id = "public".patient_procedure.pproc_visit_num 
          FULL OUTER JOIN "public".procedure_desc_master_codes 
            ON "public".patient_procedure.pproc_cpcode = "public".procedure_desc_master_codes.pdescm_id 
          FULL OUTER JOIN "public".procedure_group_cpt_code 
            ON "public".procedure_group_cpt_code.pgrpcpt_pdescm_id = "public".procedure_desc_master_codes.pdescm_id


GROUP BY "public".visit.visit_id, "public".procedure_group_cpt_code.pgrpcpt_code  
ORDER BY "public".visit.visit_id )

AND  "public".visit.visit_stay_type = '1' OR "public".visit.visit_stay_type ='2'
我认为这最后一行是按日期划界的正确方法

AND "public".visit.visit_disch_date > (now() - interval '90 day' )
几年前,我的约会远远超出了范围

如果有人需要查看整个查询的更多内容,我将发布它。它相当大 也很高兴包括任何人可能要求的更多信息

问题在于or。在以下情况下使用:

其他一些建议:

学习使用表格别名。 exists子查询中不需要select distinct on。 ORDERBY在子查询中几乎不合适。 很少需要完全外部联接。 问题在于手术室。在以下情况下使用:

其他一些建议:

学习使用表格别名。 exists子查询中不需要select distinct on。 ORDERBY在子查询中几乎不合适。 很少需要完全外部联接。 同意IN的样式优于OR here,但如果您希望在将来的查询中使用OR,例如where IN不适合,因为您的OR将在不同的列上操作,则应使用括号对条件进行分组,如下所示:

AND (
  "public".visit.visit_stay_type = '1' 
  OR "public".visit.visit_stay_type ='2')
AND "public".visit.visit_disch_date > (now() - interval '90 day' )
同意IN的样式优于OR here,但如果您希望在将来的查询中使用OR,例如where IN不适合,因为您的OR将在不同的列上操作,则应使用括号对条件进行分组,如下所示:

AND (
  "public".visit.visit_stay_type = '1' 
  OR "public".visit.visit_stay_type ='2')
AND "public".visit.visit_disch_date > (now() - interval '90 day' )

成功了!!!谢谢你,我可能永远也不会发现我会记住这一点。它是否因为日期语句只应用于其中一个而产生问题?奇怪的是,我试着用你的其他建议来处理这个问题,但它基本上是按原样工作的。我正在使用的数据库是一个热堆。我认为这个查询有300行长,在这里看到的内容之外还有8个完整的外部连接。@JasonDossett。日期仅适用于2值。谢谢!一旦你指出错误,事实上它看起来很明显。这是有效的!!!谢谢你,我可能永远也不会发现我会记住这一点。它是否因为日期语句只应用于其中一个而产生问题?奇怪的是,我试着用你的其他建议来处理这个问题,但它基本上是按原样工作的。我正在使用的数据库是一个热堆。我认为这个查询有300行长,在这里看到的内容之外还有8个完整的外部连接。@JasonDossett。日期仅适用于2值。谢谢!一旦你指出错误,事实上它看起来很明显。