Я новичок в SQL Server, и у меня есть некоторые сомнения по поводу функции lag(). Мне нужно рассчитать среднее расстояние (в днях) между действиями двух пользователей. Затем я должен ГРУППИРОВАТЬ по всем пользователям, вычислить все различия дат между строками для каждого пользователя и, наконец, выбрать среднее значение группы.
Просто для ясности, у меня есть такая таблица:
Сначала я должен отфильтровать дни с действиями (деятельности! = 0). Затем я должен создать это:
И, наконец, ожидаемый результат таков:
Я думал, что это может быть "своего рода" код:
select userid, avg(diff)
(SELECT *,DATEDIFF(day, Lag(dateid, 1) OVER(ORDER BY [Userid]),
dateid) as diff
FROM table1
where activities!=0
group by userid) t
group by userid
Конечно, это не работает. Я думаю, что мне также нужно выполнить цикл while, поскольку номер строки изменяется для каждого пользователя.
Я надеюсь, что вы можете помочь мне! большое тебе спасибо
text
. Если вы хотите быть действительно полезным, операторы DDL иINSERT
еще лучше (Как опубликовать Вопрос T-SQL). Некоторые данные на вашем изображении выглядят так, как будто они отсутствуют (например, где значение для действий в 3-й строке на первом изображении). Я также не вижу, как данные из первого изображения становятся данными во втором. Если вы предоставите операторы DDL иINSERT
, это будет очень полезно. - person Larnu   schedule 07.09.2018