当前位置: 首页 > article >正文

分享一个sql统计的客户需求

分享个最近的一个需求

领导想要知道各个时间段,各个科室,哪些是预出院的患者,哪些是临时出院的患者,在我看来对于系统来说好像没有什么好的界定方式,我就细问下应该如何界定(防止查错背锅)


在我再次确认下,得到的是只要是出院时间在早上12点前,并且开有今日出院+明日出院 这两条医嘱的就算是预出院患者,还需要查开了今日出院,没开明日出院的以及两者都没开立的


那么,我们要写的sql就是
字段1:(出院时间)字段2:(科室名词)字段3:(12点前+今日出院+明日出院)字段4:(全天+今日出院+无明日出院)字段5:(全天+无今日出院+无明日出院)
这个查询统计的难点主要在于,医嘱表是不止今明出院这两条医嘱的,就需要换个思路去解决
字段3好说,in('今日出院','明日出院')即可
字段4需要 先查出今日出院,再查出明日出院,最后把今日出院总数-明日出院总数,也就是(今日出院总数)-(明日出院总数)
字段5则是 (查出科室带出院时间的人)-(今日出院总数)-(明日出院总数)

最后需要按科室汇总,时间排序
以下是实际sql,有好的优化思路也可以分享下

SELECT 
    SUBSTR(i3.HOSPITAL_DISCHARGE_TIME, 1, 8) AS discharge_date,
    i3.DEPT_NAME, 
    COUNT(DISTINCT CASE WHEN io.ipid IS NOT NULL THEN i3.IPID END) AS 有今明,
    COUNT(DISTINCT CASE WHEN fo.ipid IS NULL THEN i3.IPID END) AS 有今无明,
    COUNT(DISTINCT CASE WHEN io.ipid IS NULL THEN i3.IPID END) AS 今明都无
FROM 
    adt.INPATIENT i3
LEFT JOIN 
    (
    SELECT 
        mo.ipid
    FROM 
        adt.INPATIENT i2
    JOIN 
        inpord.MEDICAL_ORDER mo ON i2.IPID = mo.IPID
    WHERE 
        mo.ORDER_code = '938' 
        AND i2.HOSPITAL_DISCHARGE_TIME >= '20250301000000'
    ) o938 ON i3.IPID = o938.ipid
LEFT JOIN 
    (
    SELECT 
        mo.ipid
    FROM 
        adt.INPATIENT i2
    JOIN 
        inpord.MEDICAL_ORDER mo ON i2.IPID = mo.IPID
    WHERE 
        mo.ORDER_code = 'F00000099821' 
        AND i2.HOSPITAL_DISCHARGE_TIME >= '20250301000000'
    ) fo ON i3.IPID = fo.ipid
LEFT JOIN 
    (
    SELECT 
        DISTINCT i2.ipid
    FROM 
        adt.INPATIENT i2
    JOIN 
        inpord.MEDICAL_ORDER mo ON i2.IPID = mo.IPID
    WHERE 
        mo.ORDER_code IN ('938', 'F00000099821') 
        AND i2.HOSPITAL_DISCHARGE_TIME >= '20250301000000'
        AND SUBSTR(i2.HOSPITAL_DISCHARGE_TIME, 9, 4) <= '1200'  
    ) io ON i3.IPID = io.ipid
WHERE 
    i3.HOSPITAL_DISCHARGE_TIME IS NOT NULL
    AND i3.HOSPITAL_DISCHARGE_TIME >= '20250301000000'
    AND SUBSTR(i3.HOSPITAL_DISCHARGE_TIME, 5, 4) = '0301'  
    AND i3.dept_name != '测试'
GROUP BY 
    SUBSTR(i3.HOSPITAL_DISCHARGE_TIME, 1, 8), i3.DEPT_NAME
ORDER BY 
    discharge_date ASC;


http://www.kler.cn/a/587716.html

相关文章:

  • Vue2+Vant2 项目初学
  • 故障诊断——neo4j入门
  • centos7通过yum安装redis
  • golang算法回溯
  • spring boot 发送邮件验证码
  • 解锁健康密码:拥抱养生,重塑生活
  • python笔记2
  • Ubuntu 18,04 LTS 通过APT安装mips64el的交叉编译器。
  • TCP/IP四层网络模型
  • 玩转github
  • c#Winform也可以跨平台了GTK框架GTKSystem.Windows.Forms
  • 跳跃游戏 (leetcode 55
  • 012---状态机的基本知识
  • 《从零手写Linux Shell:详解进程控制、环境变量与内建命令实现 --- 持续更新》
  • 解决Windows版Redis无法远程连接的问题
  • Dify Docker 私有化部署遇到的问题
  • STM32步进电机S型与T型加减速算法
  • Profinet转Profinet以创新网关模块为核心搭建西门子和欧姆龙PLC稳定通讯架构案例​
  • 玩转python:通俗易懂掌握高级数据结构-collections模块之ChainMap
  • 2Android中的AIDL是什么以及如何使用它