Advertisement
Shayrma

2_4_1

Feb 27th, 2025
219
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 6.49 KB | Fixit | 0 0
  1. WITH
  2.  
  3.     --- Секция параметров ---
  4.     toStartOfMonth(toDate('2024-01-01')) AS dat1,
  5.     toLastDayOfMonth(toDate('2024-12-01')) AS dat2,
  6.     dateDiff('month', dat1, dat2) + 1 AS date_diff,
  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. FROM kis.movement_history_u mov
  68. LEFT JOIN dm_ap2.dct_lpu lpu ON mov.facility_id = lpu.lpu_id
  69. LEFT JOIN dept ON mov.facility_id = dept.facility_id AND mov.dept_id = dept.dept_id::text
  70. WHERE
  71.   dept.kruglosutochnoe_dept = 1    AND
  72.     ((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
  74.   (lpu.lpu_short_name IN ('(Оцифровка эпикризов) ГБУЗ "ГКБ им. С.П. Боткина"', 'ГБУЗ "ДГКБ св.Владимира ДЗМ"')))
  75.   --AND patient_id IS NOT NULL
  76. --  and toDate(in_dt)>='2024-01-01'
  77. --  and toDate(in_dt)< '2025-01-01'
  78.   AND toDate(in_dt) BETWEEN dat1 AND dat2
  79.   ),
  80.   hosp_grouped AS (
  81.   SELECT
  82.   facility_id,
  83.   bed_profile,
  84.   COUNT(movement_id) AS count_hosp
  85.   FROM hosp_detail_cte
  86.   GROUP BY facility_id,
  87.   bed_profile),
  88. beds AS (
  89.         SELECT
  90.             b.bed_count AS bed_count,
  91.                l.lpu_short_name AS lpu_short_name,
  92.                b.dept_id AS dept_id,
  93.                b.facility_id AS facility_id,
  94.                b.bed_profile_name AS bed_profile_name
  95.           FROM kis.bed_fund b
  96.           LEFT JOIN dm_ap2.dct_lpu l ON b.facility_id = l.lpu_id
  97.           LEFT JOIN dept ON b.facility_id = dept.facility_id AND b.dept_id::NULLABLE(text) = dept.dept_id::text
  98.           WHERE dept.kruglosutochnoe_dept = 1
  99.               AND end_dt IS NULL
  100.     ),
  101.     beds_grouped AS (
  102.         SELECT SUM(bed_count) AS cnt_beds,
  103.         facility_id,
  104.         bed_profile_name
  105.         FROM beds
  106.         GROUP BY facility_id, bed_profile_name
  107.         ORDER BY facility_id
  108. ),
  109. facility_stats AS ( -- Смотри внимательнее комментарии здесь - есть параметр в запросе
  110. SELECT
  111. CASE
  112.     WHEN lpu.lpu_short_name ilike '%ГКБ № 13 ДЗМ%' THEN 'ЭПИКРИЗ ГБУЗ "ГКБ имени В.П. Демихова ДЗМ"'
  113.     ELSE lpu.lpu_short_name
  114. END AS lpu_short_name,
  115. bc.bed_profile_name AS bed_profile_name,
  116. ROUND(SUM(hg.count_hosp)/date_diff, 2) AS count_hosp, -- UPD: Ничего менять не надо: добавлен date_diff. !Менять знаменатель в зависимости от того, сколько месяцев мы берём в период, в данный момент для 12 месяцев!
  117. SUM(bc.cnt_beds) AS cnt_beds,
  118. round(SUM(hg.count_hosp)/(date_diff*SUM(bc.cnt_beds)),2) AS average_hospitalizations_on_bed -- UPD: Ничего менять не надо: добавлен date_diff. !Менять знаменатель в зависимости от того, сколько месяцев мы берём в период!
  119. FROM beds_grouped bc
  120. LEFT JOIN hosp_grouped hg ON hg.facility_id = bc.facility_id AND bc.bed_profile_name = hg.bed_profile
  121. LEFT JOIN dm_ap2.dct_lpu lpu ON lpu.lpu_id = bc.facility_id
  122. WHERE lpu.lpu_id  IN (
  123. 14932313333,
  124. 14932313379,
  125. 14932313343,
  126. 14932313317,
  127. 14932313311,
  128. 10394853,
  129. 14932313409,
  130. 14932313417,
  131. 14932313407,
  132. 14932313289,
  133. 14932313323,
  134. 14932313349,
  135. 14932313361,
  136. 14932313419,
  137. 14932313341,
  138. 14932313377,
  139. 14932313363,
  140. 14932313331,
  141. 14932313365,
  142. 14932313351,
  143. 14932313369)
  144. GROUP
  145. BY CASE
  146.     WHEN lpu.lpu_short_name ilike '%ГКБ № 13 ДЗМ%' THEN 'ЭПИКРИЗ ГБУЗ "ГКБ имени В.П. Демихова ДЗМ"'
  147.     ELSE lpu.lpu_short_name
  148. END ,
  149. bc.bed_profile_name
  150. HAVING SUM(bc.cnt_beds) IS NOT NULL AND SUM(bc.cnt_beds) <> 0
  151. AND SUM(hg.count_hosp) IS NOT NULL
  152. ),
  153. moscow_average AS (
  154. SELECT
  155. bed_profile_name,
  156. ROUND(AVG(average_hospitalizations_on_bed), 2) AS average_moscow
  157. FROM facility_stats
  158. GROUP BY bed_profile_name)
  159. SELECT
  160. fc.*,
  161. ma.average_moscow
  162. FROM facility_stats fc
  163. LEFT JOIN moscow_average ma ON ma.bed_profile_name = fc.bed_profile_name
  164. ORDER BY 1,2
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement