我正在尝试在MS ACCESS表上创建某种有效性(日期范围)字段。它将需要按ID,主题和级别分组来得出每条记录的有效期。如果没有采取相应的测试来提高成绩,则截至目前的有效期限将设置为99年12月31日。MS Access 2016中的SQL Server LEAD等效函数
我现在有如下表:
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脚本工作,有没有其他方式可以实现相同的结果?
为什么不使用MS Access pass-thru查询保留准确的SQL Server查询?此外,这里没有VBA。 – Parfait