按代理和月排名

时间:2013-03-08 17:13:06

标签: sql grouping partitioning ranking

我有一张包含以下类似数据的表格:

Agent | TCV | Parent AccountID | AccountID | Month
------+-----+------------------+-----------+--------
John  | 100 | ABC12345         | Sept13445 | 2
John  | 200 | ABC12345         | Sept345   | 2 
John  | 150 | CDE12345         | Sept546   | 2
John  | 200 | FTE1456          | Oct3467   | 2
John  | 100 | ABC12345         | Sept13445 | 3
John  | 200 | ABC12345         | Sept345   | 3 
John  | 150 | CDE12345         | Sept546   | 3
John  | 200 | FTE1456          | Oct3467   | 3

我需要的是一种按代理显示分组排名的方法,然后每个代理显示每月的父accounrDID。这个想法是在导出中,有一个代理,TCV,parentaccountDID和月的列。

因此,如果所有代理都有10个parentaccountDID(但每个代理下可能有多个accountDID),那么它将按parentAccountDID的分组TCV对它们进行排名。因此,基于第2个月的分组TCV,John的10个parentaccountDID将有10行数据,然后基于第3个月的分组TCV等10个parentaccountDID的10行数据等等。

2 个答案:

答案 0 :(得分:0)

如果您有Oracle SQL数据库 尝试以下查询,它可能会根据需要帮助您:

select Agent ,TCV ,ParentAccountID,Month,count(1) from table group by  Agent ,TCV ,ParentAccountID,Month
order by 5 desc

你也可以查看(谷歌)“密集等级”功能,如下所示:

select Agent ,TCV ,ParentAccountID,Month,dense rank over(Agent ,TCV ,ParentAccountID,Month) from table group by  Agent ,TCV ,ParentAccountID,Month

对值进行排名并对结果进行排序。

答案 1 :(得分:0)

SELECT agent, tcv, parent_accnt_id, accnt_id, curr_month
     , ROW_NUMBER() OVER (PARTITION BY curr_month, parent_accnt_id ORDER BY curr_month) rnk 
 FROM your_table
/

根据您的数据,这就是您所获得的:

AGENT    TCV    PARENT_ACCNT_ID    ACCNT_ID    CURR_MONTH    RNK
------------------------------------------------------------------
John     100    ABC12345           Sept13445     2            1
John     200    ABC12345           Sept345       2            2
John     150    CDE12345           Sept546       2            1
John     200    FTE1456            Oct3467       2            1
John     100    ABC12345           Sept13445     3            1
John     200    ABC12345           Sept345       3            2
John     150    CDE12345           Sept546       3            1
John     200    FTE1456            Oct3467       3            1