Advertisement
ariful_346

Func

Mar 1st, 2021
840
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.41 KB | None | 0 0
  1. def func2(params):
  2.     main_sql = """
  3.            select
  4.                distinct cd.client_id as client_id
  5.            from
  6.                (
  7.                select
  8.                    cd.client_id ,
  9.                    data_point_id ,
  10.                    max(cd.id) max_client_data_id
  11.                from
  12.                    client_data cd
  13.                group by
  14.                    cd.client_id ,
  15.                    data_point_id) as mcd
  16.            inner join client_data cd on
  17.                cd.id = mcd.max_client_data_id
  18.            inner join data_point dp on
  19.                dp.id = cd.data_point_id
  20.          """
  21.     where_sql = """where
  22.                dp."name" in ('business_upazilla', 'business_district', 'business_division')
  23.        """
  24.  
  25.     if params['division']:
  26.         main_sql += """inner join division dv on
  27.             dv.id =
  28.             (case
  29.                 when regexp_replace(cd."data" ->> 'value', '[^0-9]+', '', 'g')= '' then null
  30.                 else left(regexp_replace(cd."data" ->> 'value', '[^0-9]+', '', 'g'), 18)
  31.             end)::bigint
  32.             and dp."type" = 'DIVISION'
  33.            """
  34.         where_sql += " and dv.id = %s" % params['division']
  35.  
  36.     if params['district']:
  37.         main_sql += """inner join district ds on
  38.            ds.id =
  39.            (case
  40.                when regexp_replace(cd."data" ->> 'value', '[^0-9]+', '', 'g')= '' then null
  41.                else left(regexp_replace(cd."data" ->> 'value', '[^0-9]+', '', 'g'), 18)
  42.            end)::bigint
  43.            and dp."type" = 'DISTRICT'
  44.            """
  45.         where_sql += " and ds.id = %s" % params['district']
  46.  
  47.     if params['upazilla']:
  48.         main_sql += """inner join upazilla u on
  49.                u.id =
  50.                (case
  51.                    when regexp_replace(cd."data" ->> 'value', '[^0-9]+', '', 'g')= '' then null
  52.                    else left(regexp_replace(cd."data" ->> 'value', '[^0-9]+', '', 'g'), 18)
  53.                end)::bigint
  54.                and dp."type" = 'UPAZILLA'
  55.            """
  56.         where_sql += " and u.id = %s" % params['upazilla']
  57.  
  58.     sql = main_sql + where_sql
  59.  
  60.     return sql
  61.  
  62.  
  63. def func1(params):
  64.     client_sql = func2(params)
  65.     sql = """
  66.            select
  67.                *
  68.            from
  69.                client_data cd
  70.            inner join data_point dp on
  71.                cd.data_point_id = dp.id
  72.            inner join client c on
  73.                c.id = cd.client_id
  74.            inner join (
  75.                select
  76.                    cd.client_id ,
  77.                    cd.data_point_id,
  78.                    max(cd.id) as max_client_data_id
  79.                from
  80.                    client_data cd
  81.                inner join (%s) as sc on
  82.                    cd.client_id = sc.client_id
  83.                group by
  84.                    cd.client_id ,
  85.                    cd.data_point_id ) as ld on
  86.                cd.id = ld.max_client_data_id
  87.            left join upazilla u on
  88.                u.id =
  89.                (case
  90.                    when regexp_replace(cd."data" ->> 'value', '[^0-9]+', '', 'g')= '' then null
  91.                    else left(regexp_replace(cd."data" ->> 'value', '[^0-9]+', '', 'g'), 18)
  92.                end)::bigint
  93.                and dp."type" = 'UPAZILLA'
  94.            left join district ds on
  95.                ds.id =
  96.                (case
  97.                    when regexp_replace(cd."data" ->> 'value', '[^0-9]+', '', 'g')= '' then null
  98.                    else left(regexp_replace(cd."data" ->> 'value', '[^0-9]+', '', 'g'), 18)
  99.                end)::bigint
  100.                and dp."type" = 'DISTRICT'
  101.            left join division dv on
  102.                dv.id =
  103.                (case
  104.                    when regexp_replace(cd."data" ->> 'value', '[^0-9]+', '', 'g')= '' then null
  105.                    else left(regexp_replace(cd."data" ->> 'value', '[^0-9]+', '', 'g'), 18)
  106.                end)::bigint
  107.                and dp."type" = 'DIVISION'
  108.            left join data_point_enum dpe on
  109.                dpe.id =
  110.                (case
  111.                    when regexp_replace(cd."data" ->> 'value', '[^0-9]+', '', 'g')= '' then null
  112.                    else left(regexp_replace(cd."data" ->> 'value', '[^0-9]+', '', 'g'), 18)
  113.                end)::bigint
  114.                and dp."type" = 'ENUM' ;
  115.            """ % client_sql
  116.  
  117.     return sql
  118.  
  119.  
  120. params = {
  121.     'division': 4,
  122.     'district': 5,
  123.     'upazilla': None
  124. }
  125.  
  126. x = func1(params)
  127. y = 10
  128.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement