SQL Row_Number 函数和条件以及顺序它在过滤之前读取 where 子句

问题描述 投票:0回答:1

我试图弄清楚我是否无意中使用 row_number 函数过滤掉了患者的接触情况。因为它位于 select 语句中,所以我不确定 SQL 在使用 row_number 函数进行分区/排序之前是否会应用 where 条件。 我想要的是最近的患者血压(舒张压)不为零的情况。我担心的是,该函数仅查看最近的遭遇,如果患者没有测量血压,则会将其从结果集中排除。感谢对此的任何帮助。谢谢你。

select * 
   from (select p.pat_id, p.PAT_LAST_NAME, p.PAT_FIRST_NAME
              , pe.BP_SYSTOLIC, pe.BP_DIASTOLIC,pe.PCP_PROV_ID
              , pe.VISIT_PROV_ID as Pat_Enc_Provider_ID
              , CONVERT(VARCHAR(11),CAST(pe.contact_date AS DATE), 101) as VitalSignsDate
              , ROW_NUMBER() OVER (PARTITION BY pe.pat_id ORDER BY pe.contact_date DESC) rowno
           from PAT_ENC pe
           join patient p 
             on pe.pat_id = p.PAT_ID
          where (pe.contact_date > CAST(GETDATE()-20 AS DATE) 
            and pe.contact_date < CAST(GETDATE() AS DATE) 
                 )
            and pe.DEPARTMENT_ID like '271%'
            and pe.BP_DIASTOLIC is not null 
        ) TEST
   where rowno = 1
order by pat_id
sql sql-server tsql
1个回答
0
投票

首先应用 where 子句和其他谓词,然后计算窗口函数。

如果满足所有条件,您将在最终结果中获得一条记录

  1. 遇到的是已登记的患者(即pat_id存在于患者表中)
  2. 遇到的联系日期位于条件 > GETDATE() -20 和 < GETDATE()
  3. 之间
  4. department_id 如“271%”
  5. BP_DIASTOLIC 不为空。
© www.soinside.com 2019 - 2024. All rights reserved.