我很抱歉,如果这恰好是重新发布的内容,但是通过所有以前的问题,我可以找到类似的措辞,但我找不到合适的答案。
我有一张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
如何获得每count
个trainer
而不是整体总数?
我最接近的是:
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
感谢您提供的任何帮助。
答案 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