我正在嘗試在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