Advertisement
Shayrma

2_4_2

Feb 27th, 2025
236
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 10.59 KB | Fixit | 0 0
  1. WITH    
  2.  
  3.     toStartOfMonth(toDate('2024-01-01')) AS dat1,
  4.     toLastDayOfMonth(toDate('2024-11-01'))AS dat2,
  5.     dateDiff('month', dat1, dat2)+1 AS date_diff,
  6.  
  7.  
  8.  
  9. lpu AS (
  10.               SELECT lpu_id,
  11.                      lpu_short_name
  12.               FROM dm_ap2.dct_lpu
  13.               WHERE lpu_close_date IS NULL
  14. ),
  15.      dept AS (
  16.               SELECT DISTINCT ON (dept_id) dept_id AS dept_id,
  17.                      facility_id,
  18.                      dept_profile_med,
  19.                      dept_name,
  20.                      CASE WHEN  dept_name ilike '%патологии беременности%' OR
  21.                                  dept_name ilike '%новорожденн%' OR
  22.                                  dept_name ilike '%недоношенн%' OR
  23.                                  dept_name ilike '%Акушерское отделение%' OR
  24.                                  dept_name ilike '%РД%' OR
  25.                                  dept_name ilike '%Перинатальный центр%' OR
  26.                                  dept_name ilike '%Детск%' OR
  27.                                  dept_name ilike '%Педиатри%' OR
  28.                                  dept_name ilike '%Дневной стационар%' OR
  29.                                  dept_name ilike '%ДC%' OR
  30.                                  dept_name ilike '%Женская консультация%' OR
  31.                                  dept_name ilike '%ЖК%' OR
  32.                                  dept_name ilike '%КЖЗ%' OR
  33.                                  dept_name ilike '%Клиника женского здоровья%' OR
  34.                                  dept_name ilike '%ЦАОП%' OR
  35.                                  dept_name ilike '%Центр амбулаторной онкологической помощи%' OR
  36.                                  dept_name ilike '%неотложной медицинской помощи%' OR
  37.                                  dept_name ilike '%неотложной%помощ%' OR
  38.                                  dept_name ilike '%приёмного отделения%' OR
  39.                                  dept_name ilike '%скорой медицинской помощи%' OR
  40.                                  dept_name ilike '%СКП%' OR
  41.                                  dept_name ilike '%Стационар кратковременного пребывания%' OR
  42.                                  dept_name ilike '%Платны %' OR
  43.                                  dept_name ilike '%ПМУ%' OR
  44.                                  dept_name ilike '%КДО%' OR
  45.                                  dept_name ilike '%Консультативно-диагностическое отделение%' OR
  46.                                  dept_name ilike '%Консультативно-диагностический центр %' OR
  47.                                  dept_name ilike '%Клинико-диагностическое отделени%' OR
  48.                                  dept_name ilike '%Эндоскоп.центр%' OR
  49.                                  dept_name ilike '%Эндоскопический центр %' OR
  50.                                  dept_name ilike '%СКП%'  OR
  51.                                  dept_name ilike '%Стационар кратковременного пребывания%' OR
  52.                                  dept_name ilike '%ФЦ%' OR
  53.                                  dept_name ilike '%ССК%' OR
  54.                                  dept_name ilike '%Паллиатив%' OR
  55.                                  dept_name ilike '%Отд.сестр.ухода%' THEN 0
  56.                                     ELSE 1
  57.                                     END AS kruglosutochnoe_dept
  58.               FROM kis.dept
  59.               WHERE dept_end_dt IS NULL
  60.      ),
  61.     hosp_detail_cte AS (SELECT
  62.                             DISTINCT
  63.                                     mov.movement_id,
  64.                                     toDate(in_dt) AS  in_dt,
  65.                                     mov.facility_id AS facility_id,
  66.                                     mov.bed_profile,
  67.                                     mov.dept_id AS dept_id
  68.                         FROM kis.movement_history_u AS mov
  69.                         LEFT JOIN dm_ap2.dct_lpu lpu ON mov.facility_id = lpu.lpu_id
  70.                         LEFT JOIN dept ON mov.facility_id = dept.facility_id AND mov.dept_id = dept.dept_id::text
  71.                         WHERE dept.kruglosutochnoe_dept = 1  
  72.                         AND ((lpu.lpu_short_name IS NOT NULL AND (lpu.lpu_open_date  <= lpu.lpu_close_date  OR lpu.lpu_close_date  IS NULL OR lpu.lpu_open_date IS NULL))
  73.                         OR (lpu.lpu_short_name IN ('(Оцифровка эпикризов) ГБУЗ "ГКБ им. С.П. Боткина"', 'ГБУЗ "ДГКБ св.Владимира ДЗМ"')))
  74.   --AND patient_id IS NOT NULL
  75. --                      and toDate(in_dt)>='2024-01-01'
  76. --                      and toDate(in_dt)< '2024-12-01'
  77.                         AND toDate(in_dt) BETWEEN dat1 AND dat2
  78.   ),
  79.     hosp_grouped AS (
  80.                     SELECT
  81.                           facility_id,
  82.                           bed_profile,
  83.                           COUNT(movement_id) AS hosp_count
  84.                     FROM hosp_detail_cte
  85.                       GROUP BY facility_id,
  86.                       bed_profile)
  87. ,     doc AS (
  88.             SELECT  
  89.                     emp_id,
  90.                     kis.movement_history_u.facility_id AS facility_id,
  91.                     CASE
  92.                     WHEN kis.movement_history_u.facility_id IN (14932313289,
  93.                      14932313323,
  94.                      14932313349,
  95.                      14932313361,
  96.                      14932313419,
  97.                      14932313341,
  98.                      14932313377,
  99.                      14932313363,
  100.                      14932313331,
  101.                      14932313365,
  102.                      14932313351,
  103.                      14932313369,
  104.                      10394853,
  105.                      14932313311,
  106.                      14932313333,
  107.                      14932313379,
  108.                      14932313343,
  109.                      14932313317,
  110.                      14932313409,
  111.                      14932313417,
  112.                      14932313407)
  113.                     THEN TRUE ELSE FALSE
  114.                     END AS "Взрослый_многопрофильный",
  115.                     kis.movement_history_u.dept_id AS dept_id_mov,
  116.                     dept.dept_name AS dept_name,
  117.                     dept.dept_id AS dept_id_d,
  118.                     CASE WHEN dept_name ilike '%Детск%' OR dept_name ilike '%Педиатри%' THEN 'Детские отделения'
  119.                    WHEN dept_name ilike '%Дневной стационар%' OR dept_name ilike '%ДС%' THEN 'Дневной стационар'
  120.                    WHEN dept_name ilike '%Женская консультация%' OR dept_name ilike '%ЖК%' OR dept_name ilike '%Клиника женского здоровья%' OR dept_name ilike '%КЖЗ%' THEN 'Центр женского здоровья'
  121.                    WHEN dept_name ilike '%КДО%' OR dept_name ilike '%Консультативно-диагностический центр%' OR dept_name ilike '%Консультативно-диагностическое отделение%' OR dept_name ilike '%Клинико-диагностическое отделение%' THEN 'КДО'
  122.                    WHEN dept_name ilike '%неотложной медицинской помощи%' OR dept_name ilike '%неотложной%помощи%' OR dept_name ilike '%приёмного отделения%' OR dept_name ilike '%скорой медицинской помощи%'  THEN 'Приемное отделение'
  123.                    WHEN dept_name ilike '%Паллиатив%' OR dept_name ilike '%Отд.сестр.ухода%' THEN 'Паллиатив'
  124.                    WHEN dept_name ilike '%Платны%' OR dept_name ilike '%ПМУ%' THEN 'ПМУ'
  125.                    WHEN dept_name ilike '%РД %' OR dept_name ilike '%Перинатальный центр%' OR dept_name ilike '%Акушерское отделение%' OR dept_name ilike '%недоношенн%' OR dept_name ilike '%новорожденн%' OR dept_name ilike '%патологии беременности%'  THEN 'РД'
  126.                    WHEN dept_name ilike '%ФЦ_%' OR dept_name ilike '%ССК%' THEN 'ФЦ'
  127.                    WHEN dept_name ilike '%СКП%' OR dept_name ilike '%Стационар кратковременного пребывания%' THEN 'СКП'
  128.                    WHEN dept_name ilike '%ЦАОП%' OR dept_name ilike '%Центр амбулаторной онкологической помощи%' THEN 'ЦАОП'
  129.                    WHEN dept_name ilike '%Эндоскоп.центр%' OR dept_name ilike '%Эндоскопический центр%' THEN 'Эндоскопический центр'
  130.                    ELSE dept_name END AS "Отделение",
  131.                      bed_profile,
  132.                      post
  133.    FROM kis.movement_history_u
  134.    LEFT any JOIN kis.emp ON kis.emp.id::UUID = kis.movement_history_u.emp_id
  135.    LEFT JOIN dept ON dept.dept_id = kis.movement_history_u.dept_id::UUID
  136.    WHERE 1 = 1
  137.    AND post ILIKE '%врач%'
  138.    AND post NOT ILIKE'%методист%' AND post NOT ILIKE '%статистик%' AND post NOT ILIKE '%главн%' AND post NOT ILIKE
  139. '%помощник%' AND post NOT ILIKE '%помошник%' AND post NOT ILIKE '%президент%' AND post NOT ILIKE '%заведующ%' AND post NOT ILIKE '%заведущ%' AND post NOT ILIKE '%зав.%' AND post NOT ILIKE '%руководитель%' AND post NOT ILIKE '%директор%' AND post NOT ILIKE
  140. '%начальник%' AND post NOT ILIKE '%тест%' AND post NOT ILIKE '%заместитель%'
  141.     AND in_dt >= dat1
  142.               AND (in_dt IS NULL
  143.               OR in_dt <= dat2)
  144. ),
  145. lpu_doc AS (
  146.     SELECT
  147.         lpu_id,
  148.         lpu_short_name,
  149.          main_lpu_short_name
  150.      FROM dm_ap2.dct_lpu    
  151.   )
  152. -- Детализация
  153. , detal AS (
  154.     SELECT
  155.         DISTINCT
  156.         --toDate(in_dt) AS beg_dt,
  157.         --toDate(out_dt) AS end_dt,
  158.         emp_id,
  159.         bed_profile,
  160.         lpu_doc.lpu_short_name AS lpu_short_name,
  161.         lpu_doc.main_lpu_short_name AS main_lpu_short_name,
  162.         doc.dept_name,
  163.         doc."Отделение",
  164.         doc.facility_id AS facility_id,
  165.         doc.dept_id_mov AS dept_id,
  166.         doc.post
  167.     FROM doc
  168.     LEFT JOIN lpu_doc ON doc.facility_id = lpu_doc.lpu_id
  169.     WHERE 1 = 1
  170.             AND (
  171.             (lpu_short_name IS NOT NULL --AND (beg_dt <= end_dt OR end_dt IS NULL))
  172.             OR
  173.             (lpu_short_name IN ('(Оцифровка эпикризов) ГБУЗ "ГКБ им. С.П. Боткина"', 'ГБУЗ "ДГКБ св.Владимира ДЗМ"'))
  174.             )
  175.             AND "Взрослый_многопрофильный" = TRUE) --and facility_id = '14932313331' --and post ilike '%нейро%'
  176.     ORDER BY 2
  177. )
  178. -- Рейтинг по кол-ву работающих врачей
  179. , rating AS (
  180.     SELECT
  181.         facility_id,
  182.         dept_id,
  183.         bed_profile,
  184.         "Отделение",
  185.         COUNT(DISTINCT emp_id) FILTER(WHERE "Отделение" NOT IN('Детские отделения', 'Дневной стационар','ЖК', 'КДО','КЖЗ', 'Приемное отделение', 'Паллиатив', 'ПМУ', 'РД', 'ФЦ', 'СКП', 'ЦАОП','Эндоскопический центр')) AS cnt_id
  186.     FROM detal
  187.     GROUP BY 1,2,3,4
  188. ),
  189. stat AS (SELECT  CASE
  190.                         WHEN lpu.lpu_short_name ilike '%ГКБ № 13 ДЗМ%' THEN 'ЭПИКРИЗ ГБУЗ "ГКБ имени В.П. Демихова ДЗМ"'
  191.                 ELSE lpu.lpu_short_name
  192.                 END AS lpu_short_name,
  193.                 hosp_grouped.bed_profile AS bed_profile,
  194.                 hosp_grouped.hosp_count,
  195.                 rating.cnt_id,
  196.                 ROUND((hosp_grouped.hosp_count / date_diff)/ rating.cnt_id,2) AS "out_doc"
  197. FROM hosp_grouped
  198. LEFT JOIN rating ON hosp_grouped.facility_id = rating.facility_id AND hosp_grouped.bed_profile = rating.bed_profile
  199. LEFT JOIN dm_ap2.dct_lpu lpu ON lpu.lpu_id = hosp_grouped.facility_id
  200. WHERE (hosp_grouped.hosp_count != 0 AND rating.cnt_id != 0) OR rating.cnt_id != 0
  201. ),
  202.         msk_stat AS (
  203.                  SELECT bed_profile,
  204.                         ROUND(avg("out_doc"),2) AS avg_msk
  205.                  FROM stat
  206.                  GROUP BY 1
  207. )
  208. SELECT lpu_short_name,
  209.        bed_profile,
  210.        round(SUM(hosp_count)/date_diff,0) AS sum_hosp,
  211.        SUM(cnt_id) AS sumid,
  212.         (SUM(hosp_count)/date_diff)/ (SUM(cnt_id)) AS "hosp/doc",
  213.        avg_msk
  214. FROM stat
  215. LEFT JOIN msk_stat ON stat.bed_profile = msk_stat.bed_profile
  216. GROUP BY 1,2,6
  217. ORDER BY 1,2
  218.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement