如何获得多个用户的 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
很抱歉,如果这恰好是一个重新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