获取最长时间发生的数字sql

时间:2016-10-02 20:39:27

标签: sql tsql

我有一个场景,我必须得到每个公司代码出现最长时间的数字。问题是,当有两个或三个数字出现相同的次数时,我必须取平均值。

Company Code   Value
-----------------------
AA               2
AA               2
AA               3
BB               5
BB               5
BB               7
BB               7
BB               9

在上面的场景中,输出应为

  • AA 2 - 由于2发生两次而3发生一次。
  • BB 6 - 因为对于BB而言,5& 7发生2所以我必须采取平均值。

提前致谢

1 个答案:

答案 0 :(得分:1)

在下面的查询中,在获得最终输出之前完成以下计算。

(i)获取此分区级别的计数(Company_Code,Value)并按降序分配排名。

(ii)分配排名后,选择排名为1的所有行和每个Company_Code的平均值。

SELECT Company_Code,
       AVG(Value) 
  FROM
     (  
       SELECT Company_Code,
              Value,
              RANK() OVER ( PARTITION BY 
                            Company_Code,Cnt_Company_Code_Value
                            ORDER BY Cnt_Company_Code_Value DESC 
                          )  
           AS Rank_Company_Code_Value 
      FROM     
        (
           SELECT Company_Code, 
                  Value,
                  COUNT(*) OVER ( PARTITION BY Company_Code,Value ) 
                  AS Cnt_Company_Code_Value 
             FROM Table
        )
    )
WHERE Rank_Company_Code_Value = 1
GROUP BY Company_Code;