我有一张存储客户服务数据的表格。表/视图具有以下结构。
userid calls_received calls_answered calls_rejected call_date
-----------------------------------------------------------------------
1030 134 100 34 28-05-2018
1012 140 120 20 28-05-2018
1045 120 80 40 28-05-2018
1030 99 39 50 28-04-2018
1045 50 30 20 28-04-2018
1045 200 100 100 28-05-2017
1030 160 90 70 28-04-2017
1045 50 30 20 28-04-2017
这是样本数据。数据以日为单位存储 我必须在报表设计器软件中创建一个报表,该报表将日期作为输入。当用户选择例如日期时。 28/05/2018。此日期作为参数$ {call_date}发送。我必须以这样的方式查询视图,结果应如下所示。如果用户选择日期28/05/2018,那么28/04/2018和28/05/2017的数据应该并排显示,如下面的列顺序。
userid | cl_cur | ans_cur | rej_cur |success_percentage |diff_percent|position_last_month| cl_last_mon | ans_las_mon | rej_last_mon |percentage_lm|cl_last_year | ans_last_year | rej_last_year
1030 | 134 | 100 | 34 | 74.6 % | 14% | 2 | 99 | 39 | 50 | 39.3% | 160 | 90 | 70
1045 | 120 | 80 | 40 | 66.6% | 26.7% | 1 | 50 | 30 | 20 | 60% | 50 | 30 | 20
此查询的目的是在列中显示所选日期的数据,前一个月当天和前一年同一天的数据,以便用户可以查看并进行比较。此处结果按所选日期的百分比(ans_cur / cl_cur)按计算百分比的降序排序,并在success_percentage下显示。
列position_last_month是该特定员工在上个月按百分比降序排序时的位置。在该示例中,用户标识1030在上个月处于第二位置并且用户标识1045在上个月处于第一位置。同样地,我也必须计算这一年
另外还有一个名为diff_percent的字段,用于计算上个月在同一位置的人之间的百分比差异。我去年必须做的事情。我怎么能达到这个结果。请帮忙。
答案 0 :(得分:1)
这是对问题的原始版本的回答。
一种方法是join
:
select t.user_id,
t.calls_received as cr_cur, t.calls_answered as ca_cur, t.calls_rejected as cr_cur,
tm.calls_received as cr_last_mon, tm.calls_answered as ca_last_mon, tm.calls_rejected as cr_last_mon,
ty.calls_received as cr_last_year, ty.calls_answered as ca_last_year, ty.calls_rejected as cr_last_year
from t left join
t tm
on tm.userid = t.userid and
tm.call_date = dateadd(month, -1, t.call_date) left join
t ty
on ty.userid = t.userid and
tm.call_date = dateadd(year, -1, t.call_date)
where t.call_date = ${call_date};