2017-01-02 2 views
0

Как узнать среднее время между каждой транзакцией для клиентов (в секундах)?Среднее время между каждой транзакцией для клиентов

Time    Customer ID  Transaction 
11/08/2020 00:00:01  1     111 
11/08/2020 00:02:00  2     0 
11/08/2020 00:02:07  1     0 
11/08/2020 00:03:09  3     412 
11/08/2020 00:04:00  1     0 

Перед ожидаемой таблицей мне нужно, чтобы показать необходимые шаги: для идентификатора клиента 1 имеет 3 сделку, разница сделки.

  • разница между первой и второй транзакциями 126 секунд.
  • разница между второй и третьей транзакциями 113 секунд.

Ожидаемый стол:

Customer ID   Average time between each transactions for customer 
1       (126+113)/3 
2 
3 
+1

Среднее время * между * транзакциями должно быть '(126 + 113)/2', а не' 3'. –

ответ

1

Среднее время это общее время делится на единицу меньше, чем количество сделок. Таким образом:

select customerId, 
     (case when count(*) > 1 
      then datediff(second, min(time), max(time))/(count(*) - 1) 
     end) as avg_time 
from t 
group by customerId; 

Примечание: SQL Server выполняет целочисленное деление. Если вы хотите получить нецелое число в результате, вам может потребоваться преобразование или, возможно, count(*) - 1.0 в выражении.

Это предполагает, что времена только увеличиваются (что кажется разумным предположением для этого типа проблемы).

+0

Я думаю, что у вас есть ошибка, потому что вы должны делить на 'count (*) - 1'. – FDavidov

+0

@ Ф.Давидов. , , Фактически, у ОП есть эта проблема. Я изменил свой ответ и добавил комментарий к этому вопросу. –

+0

Да, я видел ваше обновление в то же самое время, когда нажал ENTER. – FDavidov

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