SQL 包含 null 和 boolean

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

我正在查询一个混乱的数据库,并想为每个患者提取下一个预约。由于一个人可以拥有多个不同的记录,因此由于每个记录的唯一性,他们可以为每个人拉多个下一个约会。问题是,如果一个人没有下一个约会,我想保留空值,但如果他们有下一个约会,则不要拉空值。我目前有这个功能,可以为每个患者安排一次预约,但因为它使用布尔值,所以会丢失空值。这就是我所拥有的

select distinct  
from a                               
where a.next_appointment = 
  (select 
  min(a2.next_appointment)    
   from a a2 
   where a2.patient_id = a.patient_id 
   and a2.next_appointment > now()
  )                               
or next_appointment is null

这符合我的要求吗? 如果不是我该如何修改? Vertica 是 SQL 风格。

谢谢!

sql vertica
1个回答
0
投票

如果没有一些数据和预期结果,很难判断,但也许您想获取每个患者 ID 的下一次预约列表(包括空值)。如果是这样,那么使用一些像这样的样本数据:

WITH    --  S a m p l e    D a t a :
    tbl (PATIENT_ID, SOME_COLUMN, ANOTHER_COLUMN, NEXT_APPOINTMENT) AS
      ( Select 101, 'Something for 101A', 'Something else AAA', DATE '2024-06-25' From Dual Union All 
      Select 101, 'Something for 101B', 'Something else BBB', DATE '2024-06-30' From Dual Union All
      Select 101, 'Something for 101C', 'Something else CCC', Null              From Dual Union All
      Select 102, 'Something for 102A', 'Something else DDD', DATE '2024-06-05' From Dual Union All
      Select 102, 'Something for 102B', 'Something else EEE', DATE '2024-06-19' From Dual Union All
      Select 103, 'Something for 103A', 'Something else FFF', Null              From Dual Union All
      Select 104, 'Something for 104A', 'Something else GGG', DATE '2024-06-13' From Dual 
      )

这已经通过 Oracle 进行了测试,但应该可以工作:

  • Vertica 9.1.1-4 现在有一个名为 LISTAGG 的内置函数
  • 从Vertica 11.0.2开始,LISTAGG函数支持WITHIN GROUP ORDER BY子句!
    检查 Vertica 文档中的确切语法并调整下面的代码 - 将 SYSDATE 替换为 NOW() ...
Select   PATIENT_ID, 
         LISTAGG(NEXT_APPOINTMENT, ', ') WITHIN GROUP (Order By NEXT_APPOINTMENT) as NEXT_APPOINTMENTS
From     tbl
Where    Coalesce(NEXT_APPOINTMENT, SYSDATE) >= SYSDATE 
Group By PATIENT_ID
/*      R e s u l t :      (on DATE '2024-06-06')
PATIENT_ID NEXT_APPOINTMENTS               
---------- --------------------------------
       101 25.06.24, 30.06.24              
       102 19.06.24              
       103                                 
       104 13.06.24                         */
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.