Я пытаюсь создать какие-то поля Validity (Date Range) в моей таблице MS ACCESS. Группе по идентификатору, теме и уровню необходимо будет определить период действия каждой записи. Если не будет проведено соответствующего теста для улучшения оценки, действующая до настоящего времени будет установлена на 31/12/9999.SQL Server LEAD Эквивалентная функция в MS Access 2016
У меня есть следующая таблица в настоящее время:
ID | Subject | Level | FromGrade | ToGrade | TestDate
101 | Math | 5 | C+ | D | 31/11/2016
101 | Math | 4 | D | A | 01/12/2016
101 | Math | 5 | D | B+ | 12/12/2016
101 | Math | 5 | B+ | A | 25/12/2016
102 | English | 4 | B | B | 20/12/2016
102 | English | 4 | B | C | 28/12/2016
Конец результирующей таблице я должен получать следующее:
ID | Subject | Level | FromGrade | ToGrade | TestDate | EffectiveTo
101 | Math | 5 | C+ | D | 31/11/2016 | 11/12/2016
101 | Math | 4 | D | A | 01/12/2016 | 31/12/9999
101 | Math | 5 | D | B+ | 12/12/2016 | 24/12/2016
101 | Math | 5 | B+ | A | 25/12/2016 | 31/12/9999
102 | English | 4 | B | B | 20/12/2016 | 27/12/2016
102 | English | 4 | B | C | 28/12/2016 | 31/12/9999
Для этого в SQL Server, я мог бы легко использовать функцию LEAD OVER
:
SELECT [ID]
, [Subject]
, [Level]
, [FromGrade]
, [ToGrade]
, [TestDate]
, [EffectiveTo] = LEAD([TestDate], 1) OVER (PARTITION BY [ID], [Subject], [Level] ORDER BY [TestDate])
into StudentTable2
FROM [dbo].[StudentTable1]
ORDER BY [ID], [Subject], [Level], [TestDate]
затем следуйте по
update [dbo].StudentTable2set [EffectiveTo] = DATEADD("DAY", -1, [EffectiveTo]) where EffectiveTo is not null
Однако, это не работает над скриптом Ms Access/VBA, есть ли другой способ добиться тех же результатов?
Почему бы не сохранить точный запрос SQL Server с использованием запроса доступа MS Access? Кроме того, здесь нет VBA. – Parfait