问题描述
我有销售数据,我需要过滤谁(代理ID)在一个月的最后3天结束时完成了更多销售,完成了80%以上的销售(最后3天销售/特定月份的总销售),以及在过去的三个月中一直如此。
我尝试了以下查询,它仅满足了最近三天的销售量,超过了其余天的销售量,并且满足了特定月份((最近三天的销售量/特定月份的总销售量))的80%以上的销售量,但是我无法满足得到连续三个月完成的任务。
示例:一位代理商,他在过去3天的销售额比休息日的销售额要多,并且在7月的最后三天的销售额超过了80%,并在过去的三个月(7月,6月,5月)连续进行了销售
SELECT a.agent_id,a.agent_name,a.ivr_registered_district,s.agent_type,s.district,s.province,a.parent_level1_id,a.parent_level1,a.sales_channel,TO_CHAR(Trunc(a.connection_date,'MONTH'),'MON-YYYY') AS MONTHYEAR,COUNT(
CASE
WHEN a.connection_date < Trunc( LAST_DAY( a.connection_date ) ) - INTERVAL '4' DAY
THEN 1
END
) AS not_last_5days_sale_count,COUNT(
CASE
WHEN a.connection_date >= Trunc( LAST_DAY( a.connection_date ) ) - INTERVAL '4' DAY
THEN 1
END
) AS last_5days_sale_count,COUNT(
CASE
WHEN a.connection_date >= Trunc( LAST_DAY( a.connection_date ) ) - INTERVAL '4' DAY
THEN 1
END
) /
( COUNT(
CASE
WHEN a.connection_date < Trunc( LAST_DAY( a.connection_date ) ) - INTERVAL '4' DAY
THEN 1
END
) +
COUNT(
CASE
WHEN a.connection_date >= Trunc( LAST_DAY( a.connection_date ) ) - INTERVAL '4' DAY
THEN 1
END
)) as percentage
FROM EDW_TGT.FACT_LTE_SALES_CHANNELS a
JOIN SFA.sfa_agent_dtl s
ON a.agent_id = s.agent_id
where a.pre_post = 'LTE-PREPAID' and a.sales_channel in ('BUSInesS PARTNER','INSTITUSIONAL','REGIONAL TradE PARTNERS','disTRIBUTOR')
--and a.connection_date BETWEEN TO_DATE('2020-07-01 00:00:0','YYYY-MM-DD HH24:MI:SS') and TO_DATE('2020-07-31 23:59:59','YYYY-MM-DD HH24:MI:SS')
and a.connection_date < ADD_MONTHS(SYSDATE,-2)
GROUP BY a.agent_id,'MON-YYYY')
HAVING COUNT(
CASE
WHEN a.connection_date > Trunc( LAST_DAY( a.connection_date ) ) - INTERVAL '4' DAY
THEN 1
END ) >
COUNT(
CASE
WHEN a.connection_date < Trunc( LAST_DAY( a.connection_date ) ) - INTERVAL '4' DAY
THEN 1
END
)
AND
COUNT(
CASE
WHEN a.connection_date >= Trunc( LAST_DAY( a.connection_date ) ) - INTERVAL '4' DAY
THEN 1
END
) >=3
AND
COUNT(
CASE
WHEN a.connection_date >= Trunc( LAST_DAY( a.connection_date ) ) - INTERVAL '4' DAY
THEN 1
END
) /
( COUNT(
CASE
WHEN a.connection_date < Trunc( LAST_DAY( a.connection_date ) ) - INTERVAL '4' DAY
THEN 1
END
) +
COUNT(
CASE
WHEN a.connection_date >= Trunc( LAST_DAY( a.connection_date ) ) - INTERVAL '4' DAY
THEN 1
END
)) > 0.79
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)