-- dw3bqksoper
select current.OperDate as OperDate,
Max(current.KsMc) as KsMc,
current.KsDm as KsDm,
sum(current.AllOperSl) as AllOperSl,
sum(last_year.OldAllOperSl) as OldAllOperSl,
sum(current.OperZss) as OperZss,
sum(last_year.OldOperZss) as OldOperZss,
sum(current.JrOperZss) as JrOperZss,
sum(last_year.OldJrOperZss) as OldJrOperZss,
sum(current.ZdOperZss) as ZdOperZss,
sum(last_year.OldZdOperZss) as OldZdOperZss,
sum(current.ZlOperZss) as ZlOperZss,
sum(last_year.OldZlOperZss) as OldZlOperZss,
sum(current.ZzSl) as ZzSl,
sum(last_year.OldZzSl) as OldZzSl,
sum(current.YzSl) as YzSl,
sum(last_year.OldYzSl) as OldYzSl,
sum(current.WzSl) as WzSl,
sum(last_year.OldWzSl) as OldWzSl,
sum(current.JzSl) as JzSl,
sum(last_year.OldJzSl) as OldJzSl,
sum(current.SjSl) as SjSl,
sum(last_year.OldSjSl) as OldSjSl,
max(current.OperAddrDm) as OperAddrDm,
max(current.OperAddrMc) as OperAddrMc,
sum(current.WcOperSl) as WcOperSl,
sum(last_year.OldWcOperSl) as OldWcOperSl,
sum(current.SDRG1) as SDRG1,
sum(last_year.OldSDRG1) as OldSDRG1,
sum(current.SDRG2) as SDRG2,
sum(last_year.OldSDRG2) as OldSDRG2,
sum(current.SDRG3) as SDRG3,
sum(last_year.OldSDRG3) as OldSDRG3,
sum(current.SDRG4) as SDRG4,
sum(last_year.OldSDRG4) as OldSDRG4,
sum(current.ESDSl) as ESDSl,
sum(last_year.OldESDSl) as OldESDSl
from
(
select date(a.OperDate) as OperDate,
Max(f.KsMc) as KsMc,
a.KsDm,
sum(case when (e.OperSxID=1002189778 or e.OperSxID=1002189861 or e.OperSxID=1002189906 or e.OperSxID=1002189980) then 1 else 0 end) as AllOperSl,
0 as OldAllOperSl,
sum(case when e.OperSxID=1002189778 then 1 else 0 end) as OperZss,
0 as OldOperZss,
sum(case when e.OperSxID=1002189861 then 1 else 0 end) as JrOperZss,
0 as OldJrOperZss,
sum(case when e.OperSxID=1002189906 then 1 else 0 end) as ZdOperZss,
0 as OldZdOperZss,
sum(case when e.OperSxID=1002189980 then 1 else 0 end) as ZlOperZss,
0 as OldZlOperZss,
sum(case when (e.OperSxID=1002189778 or e.OperSxID=1002189861 or e.OperSxID=1002189906 or e.OperSxID=1002189980) and a.StatusCode>='DB10' and a.StatusCode<='DB45' then 1 else 0 end) as ZzSl,
0 as OldZzSl,
sum(case when (e.OperSxID=1002189778 or e.OperSxID=1002189861 or e.OperSxID=1002189906 or e.OperSxID=1002189980) and a.StatusCode='DB50' then 1 else 0 end) as YzSl,
0 as OldYzSl,
sum(case when (e.OperSxID=1002189778 or e.OperSxID=1002189861 or e.OperSxID=1002189906 or e.OperSxID=1002189980) and a.StatusCode>='DB05' and a.StatusCode<'DB10' then 1 else 0 end) as WzSl,
0 as OldWzSl,
sum(case when (e.OperSxID=1002189778 or e.OperSxID=1002189861 or e.OperSxID=1002189906 or e.OperSxID=1002189980) and a.JzFlag='1' then 1 else 0 end) as JzSl,
0 as OldJzSl,
sum(case when (e.OperSxID=1002189778 or e.OperSxID=1002189861 or e.OperSxID=1002189906 or e.OperSxID=1002189980) and (e.GKID=1002190291) then 1 else 0 end) as SjSl,
0 as OldSjSl,
a.OperAddrDm,
max(case when a.OperAddrDm='82' then 'DSA手术室' when a.OperAddrDm='84' then '内镜手术室' when a.OperAddrDm='BD' then '日间手术室' else '大手术室' end) as OperAddrMc,
sum(case when (e.WcOperFlag='1') then 1 else 0 end) as WcOperSl,
0 as OldWcOperSl,
sum(case when (e.SDRGID=1002190064) then 1 else 0 end) as SDRG1,
0 as OldSDRG1,
sum(case when (e.SDRGID=1002190090) then 1 else 0 end) as SDRG2,
0 as OldSDRG2,
sum(case when (e.SDRGID=1002190126) then 1 else 0 end) as SDRG3,
0 as OldSDRG3,
sum(case when (e.SDRGID=1002190153) then 1 else 0 end) as SDRG4,
0 as OldSDRG4,
sum(case when (e.OperSxID=1002189980) then 1 else 0 end) as ESDSl,
0 as OldESDSl
from BqOperTzd a inner join bqopertzdmx b on a.UniqueID=b.BqOperTzdID
inner join CwYlMl e on b.OperID=e.YlID
left join BqOperDjk d on a.UniqueID=d.BqOperTzdID and d.DelFlag='0'
inner join RsBqKsXx f on a.KsDm=f.KsDm
where (date(a.OperDate) BETWEEN CURRENT_DATE - interval 30 day and CURRENT_DATE) and
a.StatusCode>'DB00' and
a.StatusCode<'DB99' and
a.DelFlag='0'
group by date(a.OperDate),a.OperAddrDm,a.KsDm) as current,
(select date(a.OperDate) as OperDate,
Max(f.KsMc) as KsMc,
a.KsDm,
0 as AllOperSl,
sum(case when (e.OperSxID=1002189778 or e.OperSxID=1002189861 or e.OperSxID=1002189906 or e.OperSxID=1002189980) then 1 else 0 end) as OldAllOperSl,
0 as OperZss,
sum(case when e.OperSxID=1002189778 then 1 else 0 end) as OldOperZss,
0 as JrOperZss,
sum(case when e.OperSxID=1002189861 then 1 else 0 end) as OldJrOperZss,
0 as ZdOperZss,
sum(case when e.OperSxID=1002189906 then 1 else 0 end) as OldZdOperZss,
0 as ZlOperZss,
sum(case when e.OperSxID=1002189980 then 1 else 0 end) as OldZlOperZss,
0 as ZzSl,
sum(case when (e.OperSxID=1002189778 or e.OperSxID=1002189861 or e.OperSxID=1002189906 or e.OperSxID=1002189980) and a.StatusCode>='DB10' and a.StatusCode<='DB45' then 1 else 0 end) as OldZzSl,
0 as YzSl,
sum(case when (e.OperSxID=1002189778 or e.OperSxID=1002189861 or e.OperSxID=1002189906 or e.OperSxID=1002189980) and a.StatusCode='DB50' then 1 else 0 end) as OldYzSl,
0 as WzSl,
sum(case when (e.OperSxID=1002189778 or e.OperSxID=1002189861 or e.OperSxID=1002189906 or e.OperSxID=1002189980) and a.StatusCode>='DB05' and a.StatusCode<'DB10' then 1 else 0 end) as OldWzSl,
0 as JzSl,
sum(case when (e.OperSxID=1002189778 or e.OperSxID=1002189861 or e.OperSxID=1002189906 or e.OperSxID=1002189980) and a.JzFlag='1' then 1 else 0 end) as OldJzSl,
0 as SjSl,
sum(case when (e.OperSxID=1002189778 or e.OperSxID=1002189861 or e.OperSxID=1002189906 or e.OperSxID=1002189980) and (e.GKID=1002190291) then 1 else 0 end) as OldSjSl,
a.OperAddrDm,
max(case when a.OperAddrDm='82' then 'DSA手术室' when a.OperAddrDm='84' then '内镜手术室' when a.OperAddrDm='BD' then '日间手术室' else '大手术室' end) as OperAddrMc,
0 as WcOperSl,
sum(case when (e.WcOperFlag='1') then 1 else 0 end) as OldWcOperSl,
0 as SDRG1,
sum(case when (e.SDRGID=1002190064) then 1 else 0 end) as OldSDRG1,
0 as SDRG2,
sum(case when (e.SDRGID=1002190090) then 1 else 0 end) as OldSDRG2,
0 as SDRG3,
sum(case when (e.SDRGID=1002190126) then 1 else 0 end) as OldSDRG3,
0 as SDRG4,
sum(case when (e.SDRGID=1002190153) then 1 else 0 end) as OldSDRG4,
0 as ESDSl,
sum(case when (e.OperSxID=1002189980) then 1 else 0 end) as OldESDSl
from BqOperTzd a inner join bqopertzdmx b on a.UniqueID=b.BqOperTzdID
inner join CwYlMl e on b.OperID=e.YlID
left join BqOperDjk d on a.UniqueID=d.BqOperTzdID and d.DelFlag='0'
inner join RsBqKsXx f on a.KsDm=f.KsDm
where (date(a.OperDate) BETWEEN CURRENT_DATE - interval 30 day- INTERVAL 1 year and CURRENT_DATE - interval 1 year) and
a.StatusCode>'DB00' and
a.StatusCode<'DB99' and
a.DelFlag='0'
group by date(a.OperDate),a.OperAddrDm,a.KsDm) as last_year
where DATE_FORMAT(current.OperDate,'%m-%d')=DATE_FORMAT(last_year.OperDate,'%m-%d') and
current.OperAddrDm=last_year.OperAddrDm and
current.KsDm=last_year.KsDm
group by current.OperDate,current.OperAddrDm,current.KsDm
order by current.OperDate
-- dm1bqksoper
select OperDate,
KsMc,
KsDm,
AllOperSl,
OldAllOperSl,
OperZss,
OldOperZss,
JrOperZss,
OldJrOperZss,
ZdOperZss,
OldZdOperZss,
ZlOperZss,
OldZlOperZss,
ZzSl,
OldZzSl,
YzSl,
OldYzSl,
WzSl,
OldWzSl,
JzSl,
OldJzSl,
SjSl,
OldSjSl,
OperAddrDm,
OperAddrMc,
WcOperSl,
OldWcOperSl,
SDRG1,
OldSDRG1,
SDRG2,
OldSDRG2,
SDRG3,
OldSDRG3,
SDRG4,
OldSDRG4,
ESDSl,
OldESDSl
from dw3bqksoper
where OperDate>=CURRENT_DATE - interval 30 day
CREATE TABLE `dm1bqksoper_weekly_comparison2` (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
current_iso_week VARCHAR(10) NOT NULL COMMENT '当前周 ISO 编号(如 2024-35)',
last_year_iso_week VARCHAR(10) COMMENT '去年同期 ISO 编号(如 2023-35)',
week_label varchar(50) DEFAULT NULL COMMENT '周次序列(如第32周(2025-08-04 - 2025-08-10))',
week_start DATE NOT NULL COMMENT '周起始日期(周一)',
week_end DATE NOT NULL COMMENT '周结束日期(周日)',
week_seq INT NOT NULL COMMENT '周序号(从最近到最远)',
KsDm VARCHAR(50) DEFAULT NULL COMMENT '科室代码',
KsMc VARCHAR(100) DEFAULT NULL COMMENT '科室名称',
OperAddrDm VARCHAR(50) DEFAULT NULL COMMENT '手术室代码',
OperAddrMc VARCHAR(100) DEFAULT NULL COMMENT '手术室名称',
current_year_count INT DEFAULT 0 COMMENT '本年每周手术量',
last_year_count INT DEFAULT 0 COMMENT '去年每周手术量',
current_year_SjSl INT DEFAULT 0 COMMENT '本年每周国考四级手术量',
last_year_SjSl INT DEFAULT 0 COMMENT '去年每周国考四级手术量',
yoy_change INT DEFAULT NULL COMMENT '每周同比变化量(当前 - 去年)',
yoy_change_percent DECIMAL(5,2) DEFAULT NULL COMMENT '每周同比变化',
current_year_AllOperSl INT DEFAULT 0 COMMENT '本年每周手术总人数',
last_year_AllOperSl INT DEFAULT 0 COMMENT '去年每周手术总人数'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='科室手术周报';
这是dm层从dw层抽取的日维度数据sql逻辑,现在我需要新的dm层用于对比今年和去年的周维度数据对比,要求按照iso 8601标准按周次对比。新的dm层叫dm1bqksoper_weekly_comparison2,建表语句已经给你。
最新发布