select
half_month,case when half_month like '%15' then all_pv/15
when half_month like '%28' then all_pv/13
when half_month like '%30' then all_pv/15
when half_month like '%31' then all_pv/16
when half_month like '%' || substr(to_char(%end_date%,'99999999'),8,2) and substr(to_char(%end_date%,2)>='16'
then all_pv/(cast(substr(to_char(%end_date%,2) as int) - 16 + 1)
when half_month like '%' || substr(to_char(%end_date%,2) <'15'
then all_pv/(cast(substr(to_char(%end_date%,2) as int) - 1 + 1)
end as all_pv,case when half_month like '%15' then webservice_pv/15
when half_month like '%28' then webservice_pv/13
when half_month like '%30' then webservice_pv/15
when half_month like '%31' then webservice_pv/16
when half_month like '%' || substr(to_char(%end_date%,2)>='16'
then webservice_pv/(cast(substr(to_char(%end_date%,2) <'15'
then webservice_pv/(cast(substr(to_char(%end_date%,2) as int) - 1 + 1)
end as webservice_pv,case when half_month like '%15' then part_all_pv/15
when half_month like '%28' then part_all_pv/13
when half_month like '%30' then part_all_pv/15
when half_month like '%31' then part_all_pv/16
when half_month like '%' || substr(to_char(%end_date%,2)>='16'
then part_all_pv/(cast(substr(to_char(%end_date%,2) <'15'
then part_all_pv/(cast(substr(to_char(%end_date%,2) as int) - 1 + 1)
end as part_all_pv,case when location_pv = 0 then 0.0 else (
case when half_month like '%15' then location_pv/15
when half_month like '%28' then location_pv/13
when half_month like '%30' then location_pv/15
when half_month like '%31' then location_pv/16
when half_month like '%' || substr(to_char(%end_date%,2)>='16'
then location_pv/(cast(substr(to_char(%end_date%,2) as int) - 16 + 1)
when half_month like '%' || substr(to_char(%end_date%,2) <'15'
then location_pv/(cast(substr(to_char(%end_date%,2) as int) - 1 + 1)
end ) end as location_pv
from (
select
case when substr(to_char(f_date,2) >= '01' --在01-15之间,f_date 月份<当前所选的月份 显示01-15
and substr(to_char(f_date,2) <= '15'
and substr(to_char(f_date,1,7) < substr(to_char(%end_date%,7)
then concat(substr(to_char(f_date,7),'01~',substr(to_char(f_date,'15')
when substr(to_char(f_date,2) >= '01' ----在01-15之间,f_date 月份=当前所选的月份,且%end_date% >=15,显示01-15
and substr(to_char(f_date,2) <= '15'
and substr(to_char(f_date,7) = substr(to_char(%end_date%,7)
and substr(to_char(%end_date%,2) >= '15'
then concat(substr(to_char(f_date,'15')
when substr(to_char(f_date,2) >= '01' ----在01-15之间,f_date 月份=当前所选的月份,且%end_date% <15,显示01-end_date
and substr(to_char(f_date,2) < '15'
then concat(substr(to_char(f_date,'%end_date%')
when substr(to_char(f_date,2) >= '16' --在16-月末之间,f_date 月份<当前所选的月份 显示16-月末;每个月天数不同,根据具体天数显示
and substr(to_char(f_date,7)
then concat(substr(to_char(f_date,'16~',case when substr(to_char(f_date,6,2) in ('01','03','05','07','08','10','12') then 31
when substr(to_char(f_date,2) in ('02') then 28
else 30
end )
when substr(to_char(f_date,2) >= '16' --在16-月末之间,f_date 月份=当前所选的月份 且%end_date%>15,显示16-end_date;
and substr(to_char(f_date,7)
and substr(to_char(%end_date%,2) > '15'
then concat(substr(to_char(f_date,'%end_date%')
end as half_month,sum(pv) as all_pv,sum(case when type in ('webservice') then pv else 0 end) as webservice_pv,sum(case when type in ('jsAPI','H5','map_sdk','static_map') then pv else 0 end) as part_all_pv,sum(case when type ='location_sdk' then pv else 0 end) as location_pv
from (
select xx from xxx
) temp
where f_date >= %begin_date% and f_date <= %end_date%
group by --substr(to_char(f_date,7) as f_month
case when substr(to_char(f_date,'%end_date%')
end
) t
select
f_month,all_pv /
(case when substr(f_month,'12') and f_month < substr(to_char(%end_date%,7) then 31
when substr(f_month,2) in ('02') and f_month < substr(to_char(%end_date%,7) then 28
when substr(f_month,2) in ('04','06','09','11') and f_month < substr(to_char(%end_date%,7) then 30
when f_month = substr(to_char(%end_date%,7) then cast(substr(to_char(%end_date%,2) as int)
end ) as all_pv,webservice_pv /
(case when substr(f_month,2) as int)
end ) as webservice_pv,part_all_pv /
(case when substr(f_month,2) as int)
end ) as part_all_pv,case when location_pv = 0 then 0 else location_pv /
(case when substr(f_month,2) as int)
end ) end as location_pv
from (
select
substr(to_char(f_date,7) as f_month,sum(pv)
as all_pv,sum(case when type ='location_sdk' then pv else 0 end) as location_pv
from (
) temp
where f_date >= %begin_date% and f_date <= %end_date%
group by substr(to_char(f_date,7)
) t
原文链接:https://www.f2er.com/postgresql/193915.html