如何为多个用户获取MAX COUNT?

时间:2015-02-14 02:04:58

标签: sql sql-server count max

我很抱歉,如果这恰好是重新发布的内容,但是通过所有以前的问题,我可以找到类似的措辞,但我找不到合适的答案。

我有一张trainingHistory表,其中包含每次新培训的记录。培训可以由多个trainers完成。 Clients可以有多个trainers

我要完成的是COUNT每个clients训练的最后 trainer的数量。

示例:

clientID | trainDate          | trainerID
101      | 2012-03-13 10:58:11| 10
101      | 2012-03-12 10:58:11| 11
102      | 2012-03-15 10:58:11| 10
102      | 2012-03-09 10:58:11| 12
103      | 2012-03-08 10:58:11| 7

所以我要找的最终结果是:

Results
trainerID | count
10        | 2
7         | 1

我已经尝试了很多不同的查询并查看了很多答案,包括此处的Using sub-queries in SQL to find max(count()),但到目前为止还无法获得所需的结果。

我一直得到的是这样的:

Results
trainerID | count
10        | 5
7         | 5

如何获得每counttrainer而不是整体总数?

我最接近的是:

SELECT      t.trainerName,
            t.trainerID,
            (
                SELECT      COUNT(lastTrainerCount)
                FROM        (
                                SELECT      MAX(th.clientID) AS lastTrainerCount
                                FROM        trainingHistory th
                                GROUP BY    th.clientID
                            )   AS lastTrainerCount
            )
FROM        trainers t
INNER JOIN  trainingHistory th ON (th.trainerID = t.trainerID)
WHERE       th.trainingDate BETWEEN '12/14/14' AND '02/07/15'
GROUP BY    t.trainerName, t.trainerID

结果是:

Results
trainerID | count
10        | 1072
7         | 1072

使用 SQL Server 2012

感谢您提供的任何帮助。

1 个答案:

答案 0 :(得分:1)

首先在trainDate中找到每clientID的最大sub-select。然后count外部查询中的trainerID。试试这个。

select trainerID,count(trainerID) [Count]
From
(
select clientID,trainDate,trainerID,
       row_number()over(partition by clientID order by trainDate Desc) Rn
From yourtable
) A
where Rn=1
Group by trainerID

SQLFIDDLE DEMO