SELECT
CONCAT(YEAR(a.GzRq), '-W', LPAD(WEEK(a.GzRq, 1), 2, '0')) AS GzWeek,
DATE_FORMAT(a.GzRq, '%Y-%m-%d') - INTERVAL WEEKDAY(a.GzRq) DAY AS WeekStartDate,
DATE_FORMAT(a.GzRq, '%Y-%m-%d') - INTERVAL WEEKDAY(a.GzRq) DAY + INTERVAL 6 DAY AS WeekEndDate,
CASE
WHEN DATEDIFF(CURRENT_DATE, DATE_FORMAT(a.GzRq, '%Y-%m-%d') - INTERVAL WEEKDAY(a.GzRq) DAY) BETWEEN 0 AND 6 THEN
CONCAT('本周(',
DATE_FORMAT(DATE_FORMAT(a.GzRq, '%Y-%m-%d') - INTERVAL WEEKDAY(a.GzRq) DAY, '%Y-%m-%d'),
' - ',
DATE_FORMAT(DATE_FORMAT(a.GzRq, '%Y-%m-%d') - INTERVAL WEEKDAY(a.GzRq) DAY + INTERVAL 6 DAY, '%Y-%m-%d'),
')')
WHEN DATEDIFF(CURRENT_DATE, DATE_FORMAT(a.GzRq, '%Y-%m-%d') - INTERVAL WEEKDAY(a.GzRq) DAY) BETWEEN 7 AND 13 THEN
CONCAT('过去第1周(',
DATE_FORMAT(DATE_FORMAT(a.GzRq, '%Y-%m-%d') - INTERVAL WEEKDAY(a.GzRq) DAY, '%Y-%m-%d'),
' - ',
DATE_FORMAT(DATE_FORMAT(a.GzRq, '%Y-%m-%d') - INTERVAL WEEKDAY(a.GzRq) DAY + INTERVAL 6 DAY, '%Y-%m-%d'),
')')
WHEN DATEDIFF(CURRENT_DATE, DATE_FORMAT(a.GzRq, '%Y-%m-%d') - INTERVAL WEEKDAY(a.GzRq) DAY) BETWEEN 14 AND 20 THEN
CONCAT('过去第2周(',
DATE_FORMAT(DATE_FORMAT(a.GzRq, '%Y-%m-%d') - INTERVAL WEEKDAY(a.GzRq) DAY, '%Y-%m-%d'),
' - ',
DATE_FORMAT(DATE_FORMAT(a.GzRq, '%Y-%m-%d') - INTERVAL WEEKDAY(a.GzRq) DAY + INTERVAL 6 DAY, '%Y-%m-%d'),
')')
WHEN DATEDIFF(CURRENT_DATE, DATE_FORMAT(a.GzRq, '%Y-%m-%d') - INTERVAL WEEKDAY(a.GzRq) DAY) BETWEEN 21 AND 27 THEN
CONCAT('过去第3周(',
DATE_FORMAT(DATE_FORMAT(a.GzRq, '%Y-%m-%d') - INTERVAL WEEKDAY(a.GzRq) DAY, '%Y-%m-%d'),
' - ',
DATE_FORMAT(DATE_FORMAT(a.GzRq, '%Y-%m-%d') - INTERVAL WEEKDAY(a.GzRq) DAY + INTERVAL 6 DAY, '%Y-%m-%d'),
')')
WHEN DATEDIFF(CURRENT_DATE, DATE_FORMAT(a.GzRq, '%Y-%m-%d') - INTERVAL WEEKDAY(a.GzRq) DAY) BETWEEN 28 AND 34 THEN
CONCAT('过去第4周(',
DATE_FORMAT(DATE_FORMAT(a.GzRq, '%Y-%m-%d') - INTERVAL WEEKDAY(a.GzRq) DAY, '%Y-%m-%d'),
' - ',
DATE_FORMAT(DATE_FORMAT(a.GzRq, '%Y-%m-%d') - INTERVAL WEEKDAY(a.GzRq) DAY + INTERVAL 6 DAY, '%Y-%m-%d'),
')')
WHEN DATEDIFF(CURRENT_DATE, DATE_FORMAT(a.GzRq, '%Y-%m-%d') - INTERVAL WEEKDAY(a.GzRq) DAY) BETWEEN 35 AND 41 THEN
CONCAT('过去第5周(',
DATE_FORMAT(DATE_FORMAT(a.GzRq, '%Y-%m-%d') - INTERVAL WEEKDAY(a.GzRq) DAY, '%Y-%m-%d'),
' - ',
DATE_FORMAT(DATE_FORMAT(a.GzRq, '%Y-%m-%d') - INTERVAL WEEKDAY(a.GzRq) DAY + INTERVAL 6 DAY, '%Y-%m-%d'),
')')
WHEN DATEDIFF(CURRENT_DATE, DATE_FORMAT(a.GzRq, '%Y-%m-%d') - INTERVAL WEEKDAY(a.GzRq) DAY) BETWEEN 42 AND 48 THEN
CONCAT('过去第6周(',
DATE_FORMAT(DATE_FORMAT(a.GzRq, '%Y-%m-%d') - INTERVAL WEEKDAY(a.GzRq) DAY, '%Y-%m-%d'),
' - ',
DATE_FORMAT(DATE_FORMAT(a.GzRq, '%Y-%m-%d') - INTERVAL WEEKDAY(a.GzRq) DAY + INTERVAL 6 DAY, '%Y-%m-%d'),
')')
WHEN DATEDIFF(CURRENT_DATE, DATE_FORMAT(a.GzRq, '%Y-%m-%d') - INTERVAL WEEKDAY(a.GzRq) DAY) BETWEEN 49 AND 55 THEN
CONCAT('过去第7周(',
DATE_FORMAT(DATE_FORMAT(a.GzRq, '%Y-%m-%d') - INTERVAL WEEKDAY(a.GzRq) DAY, '%Y-%m-%d'),
' - ',
DATE_FORMAT(DATE_FORMAT(a.GzRq, '%Y-%m-%d') - INTERVAL WEEKDAY(a.GzRq) DAY + INTERVAL 6 DAY, '%Y-%m-%d'),
')')
WHEN DATEDIFF(CURRENT_DATE, DATE_FORMAT(a.GzRq, '%Y-%m-%d') - INTERVAL WEEKDAY(a.GzRq) DAY) BETWEEN 56 AND 62 THEN
CONCAT('过去第8周(',
DATE_FORMAT(DATE_FORMAT(a.GzRq, '%Y-%m-%d') - INTERVAL WEEKDAY(a.GzRq) DAY, '%Y-%m-%d'),
' - ',
DATE_FORMAT(DATE_FORMAT(a.GzRq, '%Y-%m-%d') - INTERVAL WEEKDAY(a.GzRq) DAY + INTERVAL 6 DAY, '%Y-%m-%d'),
')')
WHEN DATEDIFF(CURRENT_DATE, DATE_FORMAT(a.GzRq, '%Y-%m-%d') - INTERVAL WEEKDAY(a.GzRq) DAY) BETWEEN 63 AND 69 THEN
CONCAT('过去第9周(',
DATE_FORMAT(DATE_FORMAT(a.GzRq, '%Y-%m-%d') - INTERVAL WEEKDAY(a.GzRq) DAY, '%Y-%m-%d'),
' - ',
DATE_FORMAT(DATE_FORMAT(a.GzRq, '%Y-%m-%d') - INTERVAL WEEKDAY(a.GzRq) DAY + INTERVAL 6 DAY, '%Y-%m-%d'),
')')
WHEN DATEDIFF(CURRENT_DATE, DATE_FORMAT(a.GzRq, '%Y-%m-%d') - INTERVAL WEEKDAY(a.GzRq) DAY) BETWEEN 70 AND 76 THEN
CONCAT('过去第10周(',
DATE_FORMAT(DATE_FORMAT(a.GzRq, '%Y-%m-%d') - INTERVAL WEEKDAY(a.GzRq) DAY, '%Y-%m-%d'),
' - ',
DATE_FORMAT(DATE_FORMAT(a.GzRq, '%Y-%m-%d') - INTERVAL WEEKDAY(a.GzRq) DAY + INTERVAL 6 DAY, '%Y-%m-%d'),
')')
WHEN DATEDIFF(CURRENT_DATE, DATE_FORMAT(a.GzRq, '%Y-%m-%d') - INTERVAL WEEKDAY(a.GzRq) DAY) BETWEEN 77 AND 83 THEN
CONCAT('过去第11周(',
DATE_FORMAT(DATE_FORMAT(a.GzRq, '%Y-%m-%d') - INTERVAL WEEKDAY(a.GzRq) DAY, '%Y-%m-%d'),
' - ',
DATE_FORMAT(DATE_FORMAT(a.GzRq, '%Y-%m-%d') - INTERVAL WEEKDAY(a.GzRq) DAY + INTERVAL 6 DAY, '%Y-%m-%d'),
')')
WHEN DATEDIFF(CURRENT_DATE, DATE_FORMAT(a.GzRq, '%Y-%m-%d') - INTERVAL WEEKDAY(a.GzRq) DAY) BETWEEN 84 AND 90 THEN
CONCAT('过去第12周(',
DATE_FORMAT(DATE_FORMAT(a.GzRq, '%Y-%m-%d') - INTERVAL WEEKDAY(a.GzRq) DAY, '%Y-%m-%d'),
' - ',
DATE_FORMAT(DATE_FORMAT(a.GzRq, '%Y-%m-%d') - INTERVAL WEEKDAY(a.GzRq) DAY + INTERVAL 6 DAY, '%Y-%m-%d'),
')')
WHEN DATEDIFF(CURRENT_DATE, DATE_FORMAT(a.GzRq, '%Y-%m-%d') - INTERVAL WEEKDAY(a.GzRq) DAY) BETWEEN 91 AND 97 THEN
CONCAT('过去第13周(',
DATE_FORMAT(DATE_FORMAT(a.GzRq, '%Y-%m-%d') - INTERVAL WEEKDAY(a.GzRq) DAY, '%Y-%m-%d'),
' - ',
DATE_FORMAT(DATE_FORMAT(a.GzRq, '%Y-%m-%d') - INTERVAL WEEKDAY(a.GzRq) DAY + INTERVAL 6 DAY, '%Y-%m-%d'),
')')
ELSE '历史周'
END AS WeekLabelWithDate,
a.YjFlDm,
a.YjFl,
a.YjKs,
a.ExamType,
a.CheckFl,
SUM(a.Kd_Cnt) AS Kd_Cnt,
SUM(a.Kd_Jf_Cnt) AS Kd_Jf_Cnt,
SUM(a.Yy_Dt_Cnt) AS Yy_Dt_Cnt,
SUM(a.Yy_Gt_Cnt) AS Yy_Gt_Cnt,
SUM(a.Yy_Cnt1) AS Yy_Cnt1,
SUM(a.Yy_Cnt2) AS Yy_Cnt2,
SUM(a.Yy_Cnt3) AS Yy_Cnt3,
SUM(a.Yy_Cnt4) AS Yy_Cnt4,
SUM(a.ZdYy_Xm_Cnt) AS ZdYy_Xm_Cnt,
SUM(a.Kd_Wc_Cnt) AS Kd_Wc_Cnt,
SUM(a.Kd_Wc_Cnt1) AS Kd_Wc_Cnt1,
ROUND(SUM(a.Time1_Wc_Num) / NULLIF(SUM(a.Time_Wc_Den), 0), 4) AS Time1_Wc_Rate,
ROUND(SUM(a.Time2_Wc_Num) / NULLIF(SUM(a.Time_Wc_Den), 0), 4) AS Time2_Wc_Rate,
ROUND(SUM(a.Time3_Wc_Num) / NULLIF(SUM(a.Time_Wc_Den), 0), 4) AS Time3_Wc_Rate,
ROUND(SUM(a.Time4_Wc_Num) / NULLIF(SUM(a.Time_Wc_Den), 0), 4) AS Time4_Wc_Rate,
ROUND(SUM(a.Time5_Wc_Num) / NULLIF(SUM(a.Time_Wc_Den), 0), 4) AS Time5_Wc_Rate,
ROUND(SUM(a.Time6_Wc_Num) / NULLIF(SUM(a.Time_Wc_Den), 0), 4) AS Time6_Wc_Rate,
SUM(a.Dj_Wjc_Cnt) AS Dj_Wjc_Cnt,
SUM(a.Jc_Wbg_Cnt) AS Jc_Wbg_Cnt,
SUM(a.Yy_Wc_Cnt) AS Yy_Wc_Cnt,
ROUND(SUM(a.Yy_Wc_Num) / NULLIF(SUM(a.Yy_Wc_Den), 0), 4) AS Yy_Wc_Rate,
IFNULL(SUM(c.OpenSl_Cnt), 0) AS OpenSl_Cnt,
IF(IFNULL(SUM(c.OpenSl_Cnt), 0) - IFNULL(SUM(b.Yy_cnt), 0) < 0, 0,
IFNULL(SUM(c.OpenSl_Cnt), 0) - IFNULL(SUM(b.Yy_cnt), 0)) AS KcSl_Cnt,
IF(IFNULL(SUM(e.OpenSl_Cnt), 0) - IFNULL(SUM(d.Yy_cnt), 0) < 0, 0,
IFNULL(SUM(e.OpenSl_Cnt), 0) - IFNULL(SUM(d.Yy_cnt), 0)) AS KcSl2_Cnt,
SUM(a.Time1_Wc_Num) AS Time1_Wc_Num,
SUM(a.Time2_Wc_Num) AS Time2_Wc_Num,
SUM(a.Time3_Wc_Num) AS Time3_Wc_Num,
SUM(a.Time4_Wc_Num) AS Time4_Wc_Num,
SUM(a.Time5_Wc_Num) AS Time5_Wc_Num,
SUM(a.Time6_Wc_Num) AS Time6_Wc_Num,
SUM(a.Time_Wc_Den) AS Time_Wc_Den,
SUM(a.Yy_Wc_Num) AS Yy_Wc_Num,
SUM(a.Yy_Wc_Den) AS Yy_Wc_Den
FROM dw2yj_kdyy_tj a
LEFT JOIN (
SELECT o.RqDate, o.YzGnLxDm, o.PacsCheckFlID, SUM(o.YyRc) AS Yy_cnt
FROM dw2yj_pacs_yy2 o
WHERE o.RqDate >= CURRENT_DATE - INTERVAL 14 WEEK
GROUP BY o.RqDate, o.YzGnLxDm, o.PacsCheckFlID
) b ON a.GzRq = b.RqDate AND a.YzGnLxDm = b.YzGnLxDm AND a.PacsCheckFlID = b.PacsCheckFlID
LEFT JOIN (
SELECT p.Rq, p.YzGnLxDm, p.PacsCheckFlID,
SUM(IFNULL(p.OpenSl, 0) + IFNULL(p.TmpOpenSl, 0)) AS OpenSl_Cnt
FROM dw1mzyj_jc_yy_sl p
WHERE p.Rq >= CURRENT_DATE - INTERVAL 14 WEEK
AND p.KdQy NOT IN ('病区', '急诊', '住院', '体检') AND p.StopFlag = 0
GROUP BY p.Rq, p.YzGnLxDm, p.PacsCheckFlID
) c ON a.GzRq = c.Rq AND a.YzGnLxDm = c.YzGnLxDm AND a.PacsCheckFlID = c.PacsCheckFlID
LEFT JOIN (
SELECT o.RqDate, o.YzGnLxDm, o.PacsCheckFlID, SUM(o.YyRc) AS Yy_cnt
FROM dw2yj_pacs_yy2 o
WHERE o.RqDate >= CURRENT_DATE - INTERVAL 14 WEEK
GROUP BY o.RqDate, o.YzGnLxDm, o.PacsCheckFlID
) d ON a.GzRq = d.RqDate - INTERVAL 1 DAY AND a.YzGnLxDm = d.YzGnLxDm AND a.PacsCheckFlID = d.PacsCheckFlID
LEFT JOIN (
SELECT p.Rq, p.YzGnLxDm, p.PacsCheckFlID,
SUM(IFNULL(p.OpenSl, 0) + IFNULL(p.TmpOpenSl, 0)) AS OpenSl_Cnt
FROM dw1mzyj_jc_yy_sl p
WHERE p.Rq >= CURRENT_DATE - INTERVAL 14 WEEK
AND p.KdQy NOT IN ('病区', '急诊', '住院', '体检') AND p.StopFlag = 0
GROUP BY p.Rq, p.YzGnLxDm, p.PacsCheckFlID
) e ON a.GzRq = e.Rq - INTERVAL 1 DAY AND a.YzGnLxDm = e.YzGnLxDm AND a.PacsCheckFlID = e.PacsCheckFlID
WHERE a.GzRq >= CURRENT_DATE - INTERVAL 14 WEEK
GROUP BY
CONCAT(YEAR(a.GzRq), '-W', LPAD(WEEK(a.GzRq, 1), 2, '0')),
a.YjFlDm, a.YjFl, a.YjKs, a.ExamType, a.CheckFl;将 SQL 中的 WeekLabelWithDate 字段修改为符合 ISO 周次标准并显示周一至周日的日期范围