2016-05-13 2 views
1

У меня есть таблица Emp, которая состоит из 4 столбцов;Агрегатная функция в запросе SQL Update

Name Date  Calls Supervisor 
Alwin 10-05-2016 20  Pramod 
Pavan 11-05-2016 10  Steevan 
Amit 12-05-2016 12  Raja 
Alwin 13-05-2016 15  Sagar 

Нам нужно сложить вызовы всех пользователей и поместить их под самой последней датой и соответствующего супервизора и нам нужно только одну строку для каждого пользователя. Ожидаемый результат того, что мы ищем это

Name Date  Calls Supervisor 
Pavan 11-05-2016 10  Steevan 
Amit 12-05-2016 12  Raja 
Alwin 13-05-2016 35  Sagar 

Пожалуйста, помогите мне.

+2

Можете ли вы также опубликовать ожидаемый результат? –

+0

Что вы подразумеваете под «Имя пользователя должно быть обновлено до недавнего добавленного супервизора»? –

+0

Если таблица содержит одно и то же имя пользователя дважды для другого супервизора, результат, основанный на недавнем имени пользователя, должен учитывать вызовы супервизора и суммирования. – Shivashant

ответ

0

Используйте SUM() Over, чтобы найти общую calls за Name и получить supervisor на основе последней date использования функции Row_Number() окна

;WITH cte 
    AS (SELECT NAME, 
       date, 
       Sum(calls)OVER(partition BY NAME) AS calls, 
       supervisor, 
       Row_number()OVER(partition BY NAME ORDER BY date DESC) Rn 
     FROM yourtable) 
SELECT NAME, 
     date, 
     calls, 
     supervisor 
FROM cte 
WHERE Rn = 1 
+0

Спасибо Его работало для меня – Shivashant

0

Try This

select Name, Date, SUM(Calls) from Test 
Group By Name, Date 

Результат:

Name Date  SumCalls 
Alwin 05/10/2016 35 
Pavan 05/11/2016 10 
Amit 05/12/2016 12 
+0

Я не думаю, что этот адрес «Супервизор» в результате –

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