oracle连续n天数据统计

该文描述了一个统计方法,针对连续三天及以上大便次数为零的便秘患者进行统计。通过使用SQL查询,结合窗口函数row_number()对患者记录进行排序,并通过日期差计算确定连续日期,最后筛选出记录数大于等于3的患者群体。
摘要由CSDN通过智能技术生成

近日接到同事项目上统计需求,需要统计便秘患者。规则是连续三天(包含三天)以上大便次数为零的患者。统计思路使用用户连续登录3天一样,用记录日期减去排序号,所得日期相同;再统计日期相同的记录大于等于3即可。

示例数据

因表中有多个患者的体征信息,需要通过partition by给每个患者的记录重建排序号。

 select to_char(record_date - nums, 'yyyy-mm-dd') record_date,
               patient_id,
               visit_id
          from (SELECT t.record_date,
                       row_number() over(partition by t.patient_id, t.visit_id order by t.record_date) nums,
                       t.vital_value,
                       t.patient_id,
                       t.visit_id
                  FROM nurse_vital_signs_rec t
                 where t.vital_signs = '大便次数'
                   and t.vital_value = '0'
                 order by t.patient_id, t.visit_id, t.record_date)

查出数据

再统计数量大于等于3的记录

select record_date, patient_id, visit_id
  from (select to_char(record_date - nums, 'yyyy-mm-dd') record_date,
               patient_id,
               visit_id
          from (SELECT t.record_date,
                       row_number() over(partition by t.patient_id, t.visit_id order by t.record_date) nums,
                       t.vital_value,
                       t.patient_id,
                       t.visit_id
                  FROM nurse_vital_signs_rec t
                 where t.vital_signs = '大便次数'
                   and t.vital_value = '0'
                 order by t.patient_id, t.visit_id, t.record_date))
 group by record_date, patient_id, visit_id
having count(record_date) >= 3;

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值