Я смог использовать LAG для получения данных из предыдущей строки, но я изо всех сил пытаюсь использовать ее для решения более сложной проблемы.SQL Server 2012 - использование LAG для получения данных из предыдущих строк
По существу для каждого эпизода в моем столе может быть, скажем, 10 уникальных посетителей. Каждое посещение имеет значение 1, 2 или 3.
Что необходимо сделать, когда значение посещаемости увеличивается, все следующие строки должны иметь одинаковое значение.
например.
Episode Attendance Value New Value
12345 1 1 1
12345 2 1 1
12345 3 2 2
12345 4 1 2
12345 5 1 2
12345 6 2 2
12345 7 3 3
12345 8 1 3
12345 9 1 3
12345 10 1 3
34567 1 1 1
34567 2 2 2
34567 3 1 2
34567 4 2 2
34567 5 1 2
34567 6 3 3
34567 7 1 3
56789 1 2 2
56789 2 1 2
56789 3 1 2
Таким образом, новое значение может увеличиться с 1 до 2 или 3 и от 2 до 3, но она никогда не должна уменьшаться.
Любая помощь с этим была бы весьма признательна. Использование LAG может быть неправильным ответом, но я немного начинаю, как вы могли бы собрать.
Вот SQL я получил до сих пор:
SELECT *,
NewValue =
CASE WHEN EPISODEID = Lag(EpisodeID,1) OVER(ORDER BY EpisodeID Asc) AND
LAG(Value, 1) OVER(ORDER BY [EpisodeID] asc, Attendance) >= Value THEN LAG(Value,1)
OVER(ORDER BY [EpisodeID] asc, Attendance)
ELSE Value
END
FROM TABLE
Он работает только для одной строки, и я могу понять, почему, но я не нашел достаточных указаний для улучшения на нем.
Разочаровывающе, я мог бы сделать это в Excel, но я пытаюсь улучшить свои навыки SQL
Только что понял, что он не оставил форматирование таблицы в моем примере таблицы - как я могу заставить его показать правильно? – Coxeymcqueen
Посещаемость в нашей системе кодируется уровнем 1, 2 или 3, и меня просят подсчитать, сколько там уровней 2 и 3. Просто. Однако в эпизоде, если посещаемость на более высоком уровне, все последующие посещения должны учитываться на этом новом уровне. Предыдущие остаются неизменными. Таким образом, значения посещаемости в порядке 1,1,1,2,1,1,3 составят 1,1,1,2,2,2,3. – Coxeymcqueen
Вы должны показать нам, что вы пробовали до сих пор. В противном случае ваш вопрос будет выглядеть как «сделайте мою домашнюю работу для меня», и люди с меньшей вероятностью ответят. –