2014-12-09 4 views
0
playerID  differential 
---------------------------- 
5    10.62     
5    18.55   
5    0.96    
4    1.13    
5    5.56  
4    1.12 
5    3.45 

Я пытаюсь взять сумму 5 самых последних значений с той же playerID, а затем разделите сумму на число различных дифференциалов, принятых в данном случае 5 .SQL Server: Sum() и другие математические функции

Я полностью потерял, поскольку я начинаю работать в SQL, я знаю, что могу сделать сумму значений с помощью функции sum(), но я не уверен, как использовать только самые последние значения или как отправить это значение в другую таблицу после завершения операции.

Любая помощь будет отличной.

Спасибо!

+0

Есть отметка времени или автоматический идентификатор для указания последней записи? – radar

+0

Нет, они не являются меткой времени, но они являются полем автоматического увеличения, которое только что называется идентификатором. –

+0

Вы используете SQL Server 2012 или выше? Тогда запрос может быть очень коротким. – KumarHarsh

ответ

2

Вы можете использовать окно номер аналитической функции строки для разделения строк на основе того, идентификатор игрока по идентификатору

Вы можете получить недавнюю сумму 5 записей для каждого playerid

With CTE 
As 
(
    Select id, playerid, differential, 
    row_number() over (partition by playerid order by id desc) as rn 
) 
Select playerid, sum(differential)/5 as total 
From CTE 
Where rn<=5 
Group by playerid 
+0

Подождите, что такое «С CTE»? –

+1

Это обычное табличное выражение, похоже на то, что оно является подзапросом, но более читаемым. – radar

+0

Это правильный ответ, хотя мне кажется, что SUM (дифференциальный)/5 такой же, как AVG (дифференциальный). – JohnS

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