Advertisement
Guest User

Untitled

a guest
Jan 17th, 2019
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. --B_DIAG
  2.     WITH cte AS (
  3.         SELECT
  4.             case_id,code,value,COALESCE(region_data -> 'diag_rn','1') AS diag_rn,close_date
  5.         FROM tmp_onko t
  6.         WHERE code IN ('OnkoGist','OnkoMark','OnkoDtDiag','OnkoRslt','OnkoGistNoRslt','OnkoMarkNoRslt')
  7.     ), sv AS (
  8.         SELECT DISTINCT
  9.             case_id,'1' AS diag_tip, n.id_mrf::text AS diag_code,c.value AS diag_rslt,
  10.             (SELECT value FROM cte t WHERE t.case_id = c.case_id AND t.code = 'OnkoDtDiag' AND t.diag_rn = c.diag_rn ORDER BY 1 LIMIT 1) AS diag_date,
  11.             (SELECT value FROM cte t WHERE t.case_id = c.case_id AND t.code = 'OnkoRslt'   AND t.diag_rn = c.diag_rn AND t.value = '1' LIMIT 1) AS rec_rslt  
  12.         FROM cte c
  13.          JOIN LATERAL (SELECT n.id_mrf FROM billing.n008 n WHERE c.value::integer = n.id_r_m AND c.close_date <@ daterange(n.datebeg, n.dateend,'[]') LIMIT 1) AS n ON TRUE  
  14.         WHERE c.code = 'OnkoGist'
  15.  
  16.         UNION ALL
  17.  
  18.         SELECT DISTINCT  
  19.             case_id,'2' AS diag_tip, n.id_igh::text AS diag_code,c.value AS diag_rslt,
  20.             (SELECT value FROM cte t WHERE t.case_id = c.case_id AND t.code = 'OnkoDtDiag' AND t.diag_rn = c.diag_rn ORDER BY 1 LIMIT 1) AS diag_date,
  21.             (SELECT value FROM cte t WHERE t.case_id = c.case_id AND t.code = 'OnkoRslt'   AND t.diag_rn = c.diag_rn AND t.value = '1' LIMIT 1) AS rec_rslt  
  22.         FROM cte c
  23.          JOIN LATERAL (SELECT n.id_igh FROM billing.n011 n WHERE c.value::integer = n.id_r_i AND c.close_date <@ daterange(n.datebeg, n.dateend,'[]') LIMIT 1) AS n ON TRUE  
  24.         WHERE c.code = 'OnkoMark'
  25.        
  26.         UNION ALL
  27.  
  28.         SELECT DISTINCT
  29.             case_id,'1' AS diag_tip, value AS diag_code,null AS diag_rslt,
  30.             (SELECT value FROM cte t WHERE t.case_id = c.case_id AND t.code = 'OnkoDtDiag' AND t.diag_rn = c.diag_rn ORDER BY 1 LIMIT 1) AS diag_date,
  31.             (SELECT value FROM cte t WHERE t.case_id = c.case_id AND t.code = 'OnkoRslt'   AND t.diag_rn = c.diag_rn AND t.value = '1' LIMIT 1) AS rec_rslt  
  32.         FROM cte c
  33.         WHERE c.code = 'OnkoGistNoRslt'
  34.  
  35.         UNION ALL
  36.  
  37.         SELECT DISTINCT
  38.             case_id,'2' AS diag_tip, value AS diag_code,null AS diag_rslt,
  39.             (SELECT value FROM cte t WHERE t.case_id = c.case_id AND t.code = 'OnkoDtDiag' AND t.diag_rn = c.diag_rn ORDER BY 1 LIMIT 1) AS diag_date,
  40.             (SELECT value FROM cte t WHERE t.case_id = c.case_id AND t.code = 'OnkoRslt'   AND t.diag_rn = c.diag_rn AND t.value = '1' LIMIT 1) AS rec_rslt  
  41.         FROM cte c
  42.         WHERE c.code = 'OnkoMarkNoRslt'
  43.  
  44.         UNION ALL
  45.  
  46.         SELECT DISTINCT
  47.             case_id,null AS diag_tip,null AS diag_code,null AS diag_rslt,c.value AS diag_date,null AS rec_rslt
  48.         FROM cte c
  49.         WHERE c.code = 'OnkoDtDiag'
  50.               AND NOT EXISTS (SELECT 1 FROM cte t WHERE t.case_id = c.case_id AND t.diag_rn = c.diag_rn AND t.code IN ('OnkoGist','OnkoMark','OnkoGistNoRslt','OnkoMarkNoRslt'))
  51.     ), t AS (      
  52.         SELECT case_id,(array_to_json(array_agg(row_to_json(d)::jsonb - 'case_id')))::jsonb AS b_diag FROM (
  53.             SELECT
  54.                 case_id,diag_tip,diag_code,diag_date,rec_rslt,diag_rslt
  55.             FROM sv
  56.         )d
  57.         GROUP BY 1     
  58.     )
  59.     UPDATE tmp_hstore h
  60.     SET
  61.         napr_jsonb = coalesce(napr_jsonb, jsonb_build_object()) || jsonb_build_object('b_diag',t.b_diag)
  62.     FROM t
  63.     WHERE h.case_id = t.case_id
  64.     ;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement