Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def func2(params):
- main_sql = """
- select
- distinct cd.client_id as client_id
- from
- (
- select
- cd.client_id ,
- data_point_id ,
- max(cd.id) max_client_data_id
- from
- client_data cd
- group by
- cd.client_id ,
- data_point_id) as mcd
- inner join client_data cd on
- cd.id = mcd.max_client_data_id
- inner join data_point dp on
- dp.id = cd.data_point_id
- """
- where_sql = """where
- dp."name" in ('business_upazilla', 'business_district', 'business_division')
- """
- if params['division']:
- main_sql += """inner join division dv on
- dv.id =
- (case
- when regexp_replace(cd."data" ->> 'value', '[^0-9]+', '', 'g')= '' then null
- else left(regexp_replace(cd."data" ->> 'value', '[^0-9]+', '', 'g'), 18)
- end)::bigint
- and dp."type" = 'DIVISION'
- """
- where_sql += " and dv.id = %s" % params['division']
- if params['district']:
- main_sql += """inner join district ds on
- ds.id =
- (case
- when regexp_replace(cd."data" ->> 'value', '[^0-9]+', '', 'g')= '' then null
- else left(regexp_replace(cd."data" ->> 'value', '[^0-9]+', '', 'g'), 18)
- end)::bigint
- and dp."type" = 'DISTRICT'
- """
- where_sql += " and ds.id = %s" % params['district']
- if params['upazilla']:
- main_sql += """inner join upazilla u on
- u.id =
- (case
- when regexp_replace(cd."data" ->> 'value', '[^0-9]+', '', 'g')= '' then null
- else left(regexp_replace(cd."data" ->> 'value', '[^0-9]+', '', 'g'), 18)
- end)::bigint
- and dp."type" = 'UPAZILLA'
- """
- where_sql += " and u.id = %s" % params['upazilla']
- sql = main_sql + where_sql
- return sql
- def func1(params):
- client_sql = func2(params)
- sql = """
- select
- *
- from
- client_data cd
- inner join data_point dp on
- cd.data_point_id = dp.id
- inner join client c on
- c.id = cd.client_id
- inner join (
- select
- cd.client_id ,
- cd.data_point_id,
- max(cd.id) as max_client_data_id
- from
- client_data cd
- inner join (%s) as sc on
- cd.client_id = sc.client_id
- group by
- cd.client_id ,
- cd.data_point_id ) as ld on
- cd.id = ld.max_client_data_id
- left join upazilla u on
- u.id =
- (case
- when regexp_replace(cd."data" ->> 'value', '[^0-9]+', '', 'g')= '' then null
- else left(regexp_replace(cd."data" ->> 'value', '[^0-9]+', '', 'g'), 18)
- end)::bigint
- and dp."type" = 'UPAZILLA'
- left join district ds on
- ds.id =
- (case
- when regexp_replace(cd."data" ->> 'value', '[^0-9]+', '', 'g')= '' then null
- else left(regexp_replace(cd."data" ->> 'value', '[^0-9]+', '', 'g'), 18)
- end)::bigint
- and dp."type" = 'DISTRICT'
- left join division dv on
- dv.id =
- (case
- when regexp_replace(cd."data" ->> 'value', '[^0-9]+', '', 'g')= '' then null
- else left(regexp_replace(cd."data" ->> 'value', '[^0-9]+', '', 'g'), 18)
- end)::bigint
- and dp."type" = 'DIVISION'
- left join data_point_enum dpe on
- dpe.id =
- (case
- when regexp_replace(cd."data" ->> 'value', '[^0-9]+', '', 'g')= '' then null
- else left(regexp_replace(cd."data" ->> 'value', '[^0-9]+', '', 'g'), 18)
- end)::bigint
- and dp."type" = 'ENUM' ;
- """ % client_sql
- return sql
- params = {
- 'division': 4,
- 'district': 5,
- 'upazilla': None
- }
- x = func1(params)
- y = 10
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement