我是SQL的新手,我遇到了一个(相当简单的)查询排序时间戳的问题。
我有一张表格,其中包含2014年的调查数据。我正在尝试确定良好的客户满意度表现的“学习曲线”。我想根据调查的时间戳在代理级别对每个调查进行排序和排名。这可以让我看到当代理人有5个总调查时,平均表现是什么,10,20等等。
我想它应该是(表名是tablerank):
select T1.*,
(select count(*)
from tablerank as T2
where T2.call_date > T1.call_date
) as SurveyRank
from tablerank as T1
where p1.Agent_ID = T2.Agent_ID;
对于每个代理,它会按顺序列出每个调查,并为最早的调查标记为1,为最早的调查标记为2,等等。然后我可以在Excel中旋转数据并根据调查计数查看学习曲线比任期或时间(因为调查更为罕见,有时你一个月只能得到1或2)。
答案 0 :(得分:0)
相关子查询必须在子查询本身中具有相关性;子查询中的任何表名/别名(例如T2
)在外部查询中都不可见。
对于排名,您希望计算之前的调查,并且希望包含当前调查,以便第一个调查获得排名编号1
,因此您需要使用<=
代替>
:
SELECT *,
(SELECT COUNT(*)
FROM tablerank AS T2
WHERE T2.Agent_ID = T1.Agent_ID
AND T2.call_date <= T1.call_date
) AS SurveyRank
FROM tablerank AS T1