【问题标题】:Max row count (top) customer per year每年最大行数(顶级)客户
【发布时间】:2014-07-26 10:15:24
【问题描述】:

为我的跳伞俱乐部做一些统计页面我有两个想要合并的 SQL 查询。 一个显示了今年第一次加载时跳跃次数最多的前三名跳线:

select  top 3 ROW_NUMBER() OVER(ORDER BY count(1) desc) AS Nr 
        , vc.sCust as Name
        , count(1) as JumpsCount
from    dbo.ViewInvoice vi with(nolock)
join    dbo.viewCust vc
on      vi.wCustId = vc.wCustId
where   year(vi.dtProcess) = year(getdate())
        and vi.nMani = 1
group by vc.sCust 
order by count(1) desc

输出:

--  Nr  Name            JumpsCount
--  1   Tom Awesome         17
--  2   Alan Jackson        16
--  3   John Thebest        13

下一个查询显示了在数据库中跳跃的所有年份:

select  distinct year(vi.dtProcess) As Datum
from    dbo.ViewInvoice vi 
order by 1

输出:

--  Datum
--  2010
--  ...
--  2014

我想要的是获得一个将结果与如下输出合并的查询:

--  Datum   Nr  Name                Jumpscount
--  2010    1   Some OldVeteran         100
--  2010    2   Alan Jackson            96
--  2010    3   Gordon McGann           89
--  ...
--  2014    1   Tom Awesome             17
--  2014    2   Alan Jackson            16
--  2014    3   John Thebest            13

【问题讨论】:

    标签: sql-server join count group-by


    【解决方案1】:

    更改为RANK,因此具有相同跳跃次数的跳线获得相同的位置。

    WITH JumpsPerYear AS (
        SELECT YEAR(dtProcess) AS [Year]
              ,wCustId
              ,COUNT(1) AS JumpsCount
        FROM ViewInvoice
        WHERE nMani = 1 -- first load/manifest number
        GROUP BY YEAR(dtProcess)
                ,wCustId
    )
    ,RankPerYear AS (
        SELECT [Year]
              ,wCustId
              ,RANK() OVER (PARTITION BY [Year] ORDER BY JumpsCount DESC) AS [Rank]
              ,JumpsCount
        FROM JumpsPerYear
    )
    SELECT RankPerYear.[Year] AS Datum
          ,RankPerYear.[Rank] AS Nr
          ,ViewCust.sCust AS Name
          ,RankPerYear.JumpsCount
    FROM RankPerYear
         INNER JOIN ViewCust
             ON ViewCust.wCustId = RankPerYear.wCustId
    WHERE RankPerYear.[Rank] <= 3
    ORDER BY RankPerYear.[Year]
          ,RankPerYear.[Rank]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-12-05
      • 2021-02-02
      • 2016-10-29
      • 2014-01-06
      • 2013-04-18
      • 1970-01-01
      • 2019-05-05
      相关资源
      最近更新 更多