2015-02-14 2 views
2

Прошу прощения, если это будет повторный пост, но, просматривая все предыдущие вопросы, которые я мог найти с подобной формулировкой, мне не удалось найти рабочий ответ.Как я могу получить MAX COUNT для нескольких пользователей?

У меня есть таблица 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

Цените любую помощь вы можете предоставить.

ответ

1

Сначала найдите максимальный trainDate за clientID в sub-select. Затем counttrainerID во внешнем запросе. Попробуй это.

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

+0

Спасибо за ответ, я получаю следующее сообщение об ошибке: Неправильный синтаксис около «A» –

+0

Это, кажется, сделал это, понадобится, чтобы сделать некоторые исследования по этому, чтобы найти что здесь происходит, но, безусловно, оцените быстрый ответ! Благодаря! –

Смежные вопросы