如何获得多个用户的 MAX COUNT?

How can I get the MAX COUNT for multiple users?

很抱歉,如果这恰好是一个重新post,但是通过查看之前的所有问题,我可以找到类似措辞的问题,但我无法找到有效的答案。

我有一个 trainingHistory table,它有每次新训练的记录。训练可以由多个 trainers 完成。 Clients 可以有多个 trainers.

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

示例:

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

我怎样才能得到每个 trainer 的准确 count 而不是总计?

我得到的最接近的是:

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 服务器 2012

感谢您提供的任何帮助。

首先找到 sub-select 中每个 clientID 的最大值 trainDate。然后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