Я полностью переписываю свой вопрос, чтобы упростить его. Извините, если вы прочли предыдущую версию. (Предыдущая версия этого вопроса включала очень сложный пример запроса, который создал отвлечение от того, что мне действительно нужно.) Я использую SQL Express.SQL Sum и Group By для запуска Tally?
У меня есть таблица уроков.
LessonID StudentID StudentName LengthInMinutes
1 1 Chuck 120
2 2 George 60
3 2 George 30
4 1 Chuck 60
5 1 Chuck 10
Они будут заказываться по дате. (Конечно, фактическая таблица - это тысячи записей с датами и другими данными, относящимися к уроку, но это упрощение.)
Мне нужно запросить эту таблицу, чтобы получить все строки (или подмножество строк по дате диапазон или студентом), но мне нужен мой запрос, чтобы добавить новый столбец, который мы могли бы назвать PriorLessonMinutes. То есть, сумма всех минут всех уроков для одного и того же ученика на уроках дат PRIOR.
Так что запрос возвратит:
LessonID StudentID StudentName LengthInMinutes PriorLessonMinutes
1 1 Chuck 120 0
2 2 George 60 0
3 2 George 30 60 (The sum Length from row 2 only)
4 1 Chuck 60 120 (The sum Length from row 1 only)
5 1 Chuck 10 180 (The sum of Length from rows 1 and 4)
В сущности, мне нужна беговая подсчет суммы предыдущих уроков минут для каждого студента. В идеале оценка не должна включать текущую строку, но если это так, не имеет большого значения, поскольку я могу сделать вычитание в коде, который получает запрос.
Кроме того, (и это важно), если я извлекаю только подмножество записей (например, в диапазоне дат), PriorLessonMinutes должен быть суммой, которая рассматривает строки, которые НЕ возвращаются.
Моя первая идея состояла в том, чтобы использовать SUM() и GROUP BY Student, но это не так, потому что, если я не ошибаюсь, это будет включать в себя сумму минут для всех строк для каждого ученика, включая строки, которые появляются после строки, которые не имеют отношения к сумме, в которой я нуждаюсь.
ВАРИАНТЫ Я ОТКАЗЫВАЮ: Я мог сканировать все строки в моем коде, который его получает (хотя это заставило бы меня без всякой необходимости извлекать все строки), но это явно неэффективно. Я мог бы также разместить там реальное поле данных и заполнить его, но это также создает проблемы, когда другие записи удаляются или изменяются.
Я не знаю, как написать такой запрос вместе. Любые указания?
Вы проверили мой код? – Sukanya
Я еще не проверял его, но, пожалуйста, обратите внимание, что, пока вы печатали свой ответ, я полностью переписал свой вопрос. Извини за это. – PaulOTron2000
Хорошо, я проверил его сейчас. Конечно, это относится к моему вопросу, как изначально написанному, в котором было присоединение, а не к тому, что показано выше. (Я могу справиться с проблемой присоединения.) И он включает в себя GetDate, которая является текущей датой, которая не имеет значения, поскольку каждый урок имеет собственное поле даты, поэтому один и тот же запрос должен давать одинаковые результаты независимо от того, когда он выполняется. Однако, спасибо. – PaulOTron2000