Это мои начальные данные:
DECLARE @RecordVersion TABLE (VersionID INT, RecordID VARCHAR(5), RecordValue INT, DateID INT);
INSERT INTO @RecordVersion(VersionID,RecordID,RecordValue,DateID)VALUES
(1,'R1',50,1)
,(2,'R2',60,1)
,(3,'R3',100,2)
,(4,'R2',80,2)
,(5,'R3',150,5)
,(6,'R4',200,5)
;
DECLARE @Calendar TABLE (DateID INT, [Date] DATE);
INSERT INTO @Calendar (DateID,[Date])VALUES
(1,'2019-05-01')
,(2,'2019-05-02')
,(3,'2019-05-03')
,(4,'2019-05-04')
,(5,'2019-05-05')
,(6,'2019-05-06')
;
код:
SELECT b.DateID,b.VersionID,b.RecordID,b.RecordValue
FROM (
SELECT c.DateID,a.VersionID,a.RecordID,a.RecordValue
,ROW_NUMBER()OVER(PARTITION BY c.DateID,a.RecordID ORDER BY a.DateID DESC) AS [rn]
FROM @Calendar c
INNER JOIN (
SELECT v.DateID,d.[Date],v.VersionID,v.RecordID,v.RecordValue
FROM @RecordVersion v
INNER JOIN @Calendar d ON d.DateID = v.DateID
) a ON a.[Date] <= c.[Date]
) b
WHERE b.rn = 1
ORDER BY b.DateID,b.VersionID
;
Однако он также возвращает дату 6, не уверен, что это нормально или нет. Пожалуйста, дайте мне знать.