Advertisement
Guest User

Untitled

a guest
Jul 16th, 2019
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.93 KB | None | 0 0
  1. WITH requests AS (
  2. SELECT
  3. rf.id,
  4. fin_requests_fd.get_first_request_id(rf.id) as parent_id
  5. FROM fin_requests_fd.requests_fd rf
  6. WHERE rf.deleted_at IS NULL
  7. AND rf.decision_date BETWEEN :dateFrom AND :dateTo
  8. AND (NOT (:hasStages :: BOOL) OR rf.stage_id = ANY (ARRAY[:stageIds] :: INT[]))
  9. ), unique_requests AS (
  10. SELECT DISTINCT ON (parent_id) *
  11. FROM requests
  12. ORDER BY parent_id, id DESC
  13. ), requests_with_parent AS (
  14. SELECT id, parent_id FROM unique_requests
  15. UNION
  16. SELECT parent_id AS id, null AS parent_id FROM unique_requests
  17. WHERE id <> parent_id
  18. ), cte_req_by_branch AS (
  19. WITH RECURSIVE cte_recursive_requests AS (
  20. SELECT
  21. fin_requests_fd.get_first_request_id(rf.id) AS parent_id,
  22. rf.id,
  23. rf.parent_id AS local_parent
  24. FROM fin_requests_fd.requests_fd rf
  25. JOIN unique_requests r ON r.parent_id = rf.id
  26. UNION ALL
  27. SELECT
  28. fin_requests_fd.get_first_request_id(rf.id) AS parent_id,
  29. rf.id,
  30. rf.parent_id AS local_parent
  31. FROM fin_requests_fd.requests_fd rf
  32. JOIN cte_recursive_requests ON rf.parent_id = cte_recursive_requests.id
  33. )
  34. SELECT * FROM cte_recursive_requests
  35. ), transfer_decisions AS (
  36. SELECT
  37. cte_req_by_branch.parent_id,
  38. sum(coalesce(td.amount,0)) FILTER (WHERE refs.code = :typeTransfer) AS amount_transfer,
  39. sum(coalesce(td.amount,0)) FILTER
  40. (WHERE
  41. refs.code = :typeTransfer
  42. AND program_type.code = :typeOverhaulRelocation
  43. AND td.is_overhaul
  44. ) AS amount_transfer_overhaul,
  45. sum(coalesce(td.amount,0)) FILTER
  46. (WHERE
  47. refs.code = :typeTransfer
  48. AND program_type.code = :typeOverhaulRelocation
  49. AND NOT td.is_overhaul
  50. ) AS amount_transfer_relocation,
  51. sum(rgkh_summ_nullable(td.sum_of_work,td.sum_on_percent)) FILTER (WHERE refs.code = :typeTransfer) AS amount_transfer_mski,
  52. sum(coalesce(td.amount,0)) FILTER (WHERE refs.code = :typeRefund) AS amount_refund,
  53. sum(coalesce(td.amount,0)) FILTER
  54. (WHERE
  55. refs.code = :typeRefund
  56. AND program_type.code = :typeOverhaulRelocation
  57. AND td.is_overhaul
  58. ) AS amount_refund_overhaul,
  59. sum(coalesce(td.amount,0)) FILTER
  60. (WHERE
  61. refs.code = :typeRefund
  62. AND program_type.code = :typeOverhaulRelocation
  63. AND NOT td.is_overhaul
  64. ) AS amount_refund_relocation,
  65. sum(rgkh_summ_nullable(td.sum_of_work,td.sum_on_percent)) FILTER (WHERE refs.code = :typeRefund) AS amount_refund_mski,
  66. sum(coalesce(td.amount,0)) FILTER (WHERE refs.code = :typePenalty AND td.ps_changes) AS amount_ps_changes,
  67. sum(coalesce(td.amount,0)) FILTER (WHERE refs.code = :typePenalty AND td.ms_changes) AS amount_ms_changes,
  68. sum(coalesce(td.amount,0)) FILTER (WHERE refs.code = :typePenalty AND td.kr_changes) AS amount_kr_changes,
  69. sum(coalesce(td.amount,0)) FILTER (WHERE refs.code = :typePenalty AND td.md_changes) AS amount_md_changes
  70. FROM cte_req_by_branch
  71. JOIN fin_requests_fd.transfer_decisions td ON td.request_fd_id = cte_req_by_branch.id
  72. JOIN fin_requests_fd.requests_fd rf ON rf.id = cte_req_by_branch.parent_id
  73. JOIN refs program_type ON program_type.id = rf.program_type_id
  74. LEFT JOIN refs ON refs.id = td.payment_type_id
  75. WHERE
  76. td.payment_document_date BETWEEN :dateFrom AND :dateTo
  77. GROUP BY cte_req_by_branch.parent_id
  78. ), cte_td_and_penalty_by_progr_type AS (
  79. SELECT
  80. requests_with_parent.parent_id,
  81. rf.id,
  82. rf.geo_tag_id,
  83. rf.stage_id,
  84. sum(coalesce(t.amount_ps_changes,0)) AS amount_ps_changes,
  85. sum(coalesce(t.amount_ms_changes,0)) AS amount_ms_changes,
  86. sum(coalesce(t.amount_kr_changes,0)) AS amount_kr_changes,
  87. sum(coalesce(t.amount_md_changes,0)) AS amount_md_changes,
  88.  
  89.  
  90. rgkh_summ_nullable(
  91. sum(t.amount_transfer)
  92. FILTER
  93. (WHERE
  94. r.code like 'i.financing.program_type.%overhaul%'
  95. AND NOT r.code = :typeOverhaulRelocation
  96. )
  97. ,
  98. sum(t.amount_transfer_overhaul)
  99. FILTER (WHERE r.code = :typeOverhaulRelocation)
  100. ) AS field_11,
  101.  
  102. rgkh_summ_nullable(
  103. sum(t.amount_refund)
  104. FILTER
  105. (WHERE
  106. r.code like 'i.financing.program_type.%overhaul%'
  107. AND NOT r.code = :typeOverhaulRelocation
  108. )
  109. ,
  110. sum(t.amount_refund_overhaul)
  111. FILTER (WHERE r.code = :typeOverhaulRelocation)
  112. ) AS field_12,
  113.  
  114. rgkh_summ_nullable(
  115. sum(t.amount_transfer)
  116. FILTER
  117. (WHERE
  118. r.code like 'i.financing.program_type.%relocation%'
  119. AND NOT r.code = :typeOverhaulRelocation
  120. )
  121. ,
  122. sum(t.amount_transfer_relocation)
  123. FILTER (WHERE r.code = :typeOverhaulRelocation)
  124. ) AS field_19,
  125.  
  126. rgkh_summ_nullable(
  127. sum(t.amount_refund)
  128. FILTER
  129. (WHERE
  130. r.code like 'i.financing.program_type.%relocation%'
  131. AND NOT r.code = :typeOverhaulRelocation
  132. )
  133. ,
  134. sum(t.amount_refund_relocation)
  135. FILTER (WHERE r.code = :typeOverhaulRelocation)
  136. ) AS field_20,
  137.  
  138. sum(coalesce(t.amount_transfer,0)) FILTER (WHERE r.code = :typeLowRise) AS field_28,
  139. sum(coalesce(t.amount_refund,0)) FILTER (WHERE r.code = :typeLowRise) AS field_29,
  140.  
  141. sum(coalesce(t.amount_transfer_mski,0)) FILTER (WHERE r.code = :typeMSKI) AS field_35,
  142. sum(coalesce(t.amount_refund_mski,0)) FILTER (WHERE r.code = :typeMSKI) AS field_36
  143. FROM fin_requests_fd.requests_fd rf
  144. JOIN requests_with_parent ON rf.id = requests_with_parent.id
  145. JOIN refs r ON r.id = rf.program_type_id
  146. LEFT JOIN transfer_decisions t ON t.parent_id = rf.id
  147. GROUP BY rf.id, requests_with_parent.parent_id, rf.stage_id
  148. ), request_current AS (
  149. SELECT
  150. requests_with_parent.parent_id,
  151. rf.id,
  152. rf.geo_tag_id,
  153. rf.stage_id,
  154. sum(coalesce(rfm.amount_of_funds,0)) FILTER (WHERE r.code = :typeOverhaul
  155. OR (r.code like 'i.financing.program_type.%overhaul%'
  156. AND r1.code = :typeOverhaul
  157. )) AS field_6,
  158. sum(coalesce(rfm.amount_of_subject,0)) FILTER (WHERE r.code = :typeOverhaul
  159. OR (r.code like 'i.financing.program_type.%overhaul%'
  160. AND r1.code = :typeOverhaul
  161. )) AS field_7,
  162. sum(coalesce(rfm.amount_of_mo,0)) FILTER (WHERE r.code = :typeOverhaul
  163. OR (r.code like 'i.financing.program_type.%overhaul%'
  164. AND r1.code = :typeOverhaul
  165. )) AS field_8,
  166. sum(coalesce(rfm.amount_of_owner,0)) FILTER (WHERE r.code = :typeOverhaul
  167. OR (r.code like 'i.financing.program_type.%overhaul%'
  168. AND r1.code = :typeOverhaul
  169. )) AS field_9,
  170.  
  171. sum(coalesce(rfm.amount_of_funds,0)) FILTER (WHERE r.code = :typeRelocation
  172. OR (r.code like 'i.financing.program_type.%relocation%'
  173. AND r1.code = :typeRelocation
  174. )) AS field_15,
  175. sum(coalesce(rfm.amount_of_subject,0)) FILTER (WHERE r.code = :typeRelocation
  176. OR (r.code like 'i.financing.program_type.%relocation%'
  177. AND r1.code = :typeRelocation
  178. )) AS field_16,
  179. sum(coalesce(rfm.amount_of_mo,0)) FILTER (WHERE r.code = :typeRelocation
  180. OR (r.code like 'i.financing.program_type.%relocation%'
  181. AND r1.code = :typeRelocation
  182. )) AS field_17,
  183.  
  184. sum(coalesce(rfm.amount_of_funds,0)) FILTER (WHERE r.code = :typeStimulation) AS field_22,
  185.  
  186. sum(coalesce(rfm.amount_of_funds,0)) FILTER (WHERE r.code = :typeLowRise) AS field_24,
  187. sum(coalesce(rfm.amount_of_subject,0)) FILTER (WHERE r.code = :typeLowRise) AS field_25,
  188. sum(coalesce(rfm.amount_of_mo,0)) FILTER (WHERE r.code = :typeLowRise) AS field_26,
  189.  
  190. CASE WHEN r.code = :typeMSKI
  191. THEN rf.program_sum
  192. ELSE 0 END AS program_sum,
  193. sum(coalesce(rfm.amount_of_subject,0)) FILTER (WHERE r.code = :typeMSKI) AS field_33,
  194. sum(coalesce(rfm.amount_of_mo,0)) FILTER (WHERE r.code = :typeMSKI) AS field_34
  195. FROM fin_requests_fd.requests_fd rf
  196. JOIN refs r ON r.id = rf.program_type_id
  197. JOIN requests_with_parent ON rf.id = requests_with_parent.id
  198. LEFT JOIN fin_requests_fd.requests_fd_mo rfm ON rf.id = rfm.request_fd_id AND rfm.deleted_at IS NULL
  199. LEFT JOIN refs r1 ON r1.id = rfm.program_type_id
  200. WHERE
  201. rf.decision_date BETWEEN :dateFrom AND :dateTo
  202. -- AND rf.id NOT IN (SELECT parent_id FROM requests_with_parent)
  203. GROUP BY rf.id, r.code, requests_with_parent.parent_id, rf.stage_id
  204. ) SELECT * FROM request_current WHERE id IN (5945, 5944)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement