记录一下实际占用总床日数sql语句

SELECT
--实际占用总床日数
	(
	SELECT
		sum(
		CASE
				WHEN bivr.STATUS >= 8 
				AND bivi.OUT_DEPT_TIME < to_date( '2024-03-01', 'YYYY-MM-DD' ) THEN
					bivc.days ELSE (
					CASE
							WHEN TRUNC( to_date( '2024-02-29', 'YYYY-MM-DD' ) ) - TRUNC( bivi.ADMISSION_DEPT_TIME ) = 0 THEN
							1 ELSE TRUNC( to_date( '2024-02-29', 'YYYY-MM-DD' ) ) - TRUNC( bivi.ADMISSION_DEPT_TIME ) 
						END 
						) 
					END 
					) AS bed_count 
				FROM
					hb_basic.BIZ_IP_VISIT_REGISTER bivr
					JOIN hb_basic.BIZ_IP_VISIT_CLINIC bivc ON bivr.id = bivc.VISIT_ID
					JOIN hb_basic.BIZ_IP_VISIT_INOUT bivi ON bivi.visit_id = bivr.id 
				WHERE
					bivr.flag = 1 
					AND bivr.INVALID = 0 
					AND bivi.ADMISSION_DEPT_TIME >= to_date( '2024-02-01', 'YYYY-MM-DD' ) 
					AND bivi.ADMISSION_DEPT_TIME < to_date( '2024-03-01', 'YYYY-MM-DD' ) 
				) AS "实际占用总床日数",
				(---出院者占用床位数
				SELECT
					sum( bivc.days ) AS bed_count 
				FROM
					hb_basic.BIZ_IP_VISIT_REGISTER bivr
					JOIN hb_basic.BIZ_IP_VISIT_CLINIC bivc ON bivr.id = bivc.VISIT_ID
					JOIN hb_basic.BIZ_IP_VISIT_INOUT bivi ON bivi.visit_id = bivr.id 
				WHERE
					bivr.flag = 1 
					AND bivr.INVALID = 0 
					AND bivr.STATUS IN ( 8, 32 ) 
					AND bivi.out_dept_time >= to_date( '2024-02-01', 'YYYY-MM-DD' ) 
					AND bivi.out_dept_time < to_date( '2024-03-01', 'YYYY-MM-DD' ) 
				) AS "出院者占用床位数",
				-- 总诊疗人次(门诊、住院)
				(select sum(A.all_count)
from (
select count(*) as all_count from hb_basic.biz_op_visit where flag=1 and INVALID =0 
and create_time>=to_date('2024-02-01','YYYY-MM-DD') 
	and create_time<to_date('2024-03-01','YYYY-MM-DD')
union all 
select count(*) as all_count from hb_basic.BIZ_IP_VISIT_REGISTER bivr join hb_basic.BIZ_IP_VISIT_INOUT bivi on
bivr.id = bivi.VISIT_ID 
where bivr.flag=1 and bivr.INVALID =0
and bivi.ADMISSION_DEPT_TIME >=to_date('2024-02-01','YYYY-MM-DD') 
	and bivi.ADMISSION_DEPT_TIME<to_date('2024-03-01','YYYY-MM-DD')
)A) as "总诊疗人次(门诊、住院)",
(-- 普通门诊人次数
select count(*) as all_count from hb_basic.biz_op_visit where flag=1 and INVALID =0 
and create_time>=to_date('2024-02-01','YYYY-MM-DD') 
	AND REGISTER_TYPE_NAME NOT LIKE '%急诊%'  and status>=1
	and create_time<to_date('2024-03-01','YYYY-MM-DD')) as "普通门诊人次数",
	(--- 中医诊疗人次数(中医科)
select count(*) as all_count from hb_basic.biz_op_visit where flag=1 and INVALID =0
and dept_id='HWD00034'
and create_time>=to_date('2024-02-01','YYYY-MM-DD') 
	and create_time<to_date('2024-03-01','YYYY-MM-DD')) as "中医诊疗人次数(中医科)",
	(---急诊人次数
select count(*) from hb_basic.biz_op_visit where flag=1 and INVALID =0  and  REGISTER_TYPE_NAME like '%急诊%'
and create_time>=to_date('2024-02-01','YYYY-MM-DD') 
	and create_time<to_date('2024-03-01','YYYY-MM-DD')) as "急诊人次数",
	(--出院人次数
select count(*) as all_count from hb_basic.BIZ_IP_VISIT_REGISTER bivr join hb_basic.BIZ_IP_VISIT_INOUT bivi on
bivr.id = bivi.VISIT_ID 
where bivr.flag=1 and bivr.INVALID =0 and bivr.STATUS in(8,32)
and bivi.out_dept_time>=to_date('2024-02-01','YYYY-MM-DD') 
	and bivi.out_dept_time<to_date('2024-03-01','YYYY-MM-DD')) as "出院人次数",
	(--总死亡人数、住院死亡人数
select count(*) as all_count from hb_basic.BIZ_IP_VISIT_REGISTER bivr join hb_basic.BIZ_IP_VISIT_INOUT bivi on
bivr.id = bivi.VISIT_ID 
join hb_basic.BIZ_IP_VISIT_CLINIC bivc on bivc.visit_id = bivr.id
where bivr.flag=1 and bivr.INVALID =0 and bivc.STATUS =9
and bivi.out_dept_time>=to_date('2024-02-01','YYYY-MM-DD') 
	and bivi.out_dept_time<to_date('2024-03-01','YYYY-MM-DD')) as "总死亡人数、住院死亡人数",
	(--健康检查人次 (体检科)
select count(*) as all_count from hb_basic.biz_op_visit where flag=1 and INVALID =0
and dept_id='HWD00042'
and create_time>=to_date('2024-02-01','YYYY-MM-DD') 
	and create_time<to_date('2024-03-01','YYYY-MM-DD')) as "健康检查人次 (体检科)"
		FROM
	dual;
### Hive SQL 面试常见问题及答案 #### 计算工作时长 对于给定的`abc`列中的记录,为了计算从申请到通过所占用的工作时长,可以采用以下方法。首先,过滤并提取出所有的“申请”和“通过”的时间戳;接着按照ID分组,并找到每一对对应的最早申请时间和最晚通过时间;最后计算这两个时间之间的差值作为工作时长[^1]。 ```sql SELECT id, MIN(CASE WHEN status='申请' THEN timestamp END) AS apply_time, MAX(CASE WHEN status='通过' THEN timestamp END) AS pass_time, TIMESTAMPDIFF(HOUR, MIN(CASE WHEN status='申请' THEN timestamp END), MAX(CASE WHEN status='通过' THEN timestamp END)) / 24 AS work_days FROM t14 GROUP BY id; ``` 此SQL语句假设`t14`表中有三个字段:id(客户编号)、status(状态,“申请”或“通过”)以及timestamp(时间戳)。上述查询会给出每个客户的申请与通过之间相隔的日数,这里使用了`TIMESTAMPDIFF()`函数来获取小时差异再除以24转换成天数表示的工作日长度。 #### 多值聚合显示 当涉及到将多条关联的数据汇为单行输出的情况时——比如把同一个用户的多次购买行为压缩成一行展示其所有购买的商品列表,则可以通过字符串连接的方式实现这一目标。具体做法是在子查询里按需筛选数据之后利用内置的集合操作符或者特定于数据库系统的聚集功能完成最终的结果集构建[^2]。 ```sql SELECT user_id, GROUP_CONCAT(product_id ORDER BY product_id SEPARATOR ',') as purchased_products FROM orders GROUP BY user_id; ``` 这段代码片段展示了如何在一个名为orders的关系型表格中收集每位顾客曾经买过的不同产品项,并且把这些项目依照一定顺序排列后串联起来形成一个新的属性purchased_products供后续分析处理之用。 #### 数据分组运算 面对需要基于某些条件对原始资料实施分类统计的任务场景下,通常的做法是先依据指定的标准执行初步划分动作,随后针对每一个独立的小群体内部开展进一步深入探讨。例如求解某段时间跨度内的极值变化量就属于此类典型应用案例之一,在这种情况下往往要借助窗口函数或是简单的聚合手段达成目的[^3]。 ```sql WITH grouped_data AS ( SELECT *, ROW_NUMBER() OVER (PARTITION BY group_key ORDER BY date_column DESC) rn_max, ROW_NUMBER() OVER (PARTITION BY group_key ORDER BY date_column ASC) rn_min FROM your_table ) SELECT gd.group_key, MAX(CASE WHEN gd.rn_max=1 THEN gd.date_column END)-MIN(CASE WHEN gd.rn_min=1 THEN gd.date_column END)+1 AS duration FROM grouped_data gd WHERE gd.rn_max=1 OR gd.rn_min=1 GROUP BY gd.group_key; ``` 以上实例说明了一个较为通用的技术路线图用于解决涉及日期范围计算的问题,其中包含了创建临时视图表辅助定位边界位置的关键步骤,同时也体现了灵活运用标准SQL语法结构解决问题的能力。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值