34,838
社区成员




RQ V
----------------------- -----------
2014-01-01 00:00:00.000 10
2014-02-01 00:00:00.000 10
2014-03-01 00:00:00.000 10
2014-04-01 00:00:00.000 10
2014-05-01 00:00:00.000 50
2014-06-01 00:00:00.000 50
2014-07-01 00:00:00.000 50
2014-08-01 00:00:00.000 50
2014-09-01 00:00:00.000 50
2014-10-01 00:00:00.000 50
2014-11-01 00:00:00.000 50
2014-12-01 00:00:00.000 50
DECLARE @tb1 AS TABLE (RQ DATETIME)
INSERT INTO @tb1
SELECT DATEADD(MONTH,NUMBER,'2014-1-1') FROM [master]..SPT_VALUES WHERE [TYPE]='P' AND NUMBER<12
DECLARE @TB2 AS TABLE (RQ DATETIME,V INT)
INSERT INTO @TB2
SELECT '2014-1-1',10
UNION
SELECT '2014-5-1',50
SELECT * FROM @tb1
SELECT * FROM @TB2
RQ
-----------------------
2014-01-01 00:00:00.000
2014-02-01 00:00:00.000
2014-03-01 00:00:00.000
2014-04-01 00:00:00.000
2014-05-01 00:00:00.000
2014-06-01 00:00:00.000
2014-07-01 00:00:00.000
2014-08-01 00:00:00.000
2014-09-01 00:00:00.000
2014-10-01 00:00:00.000
2014-11-01 00:00:00.000
2014-12-01 00:00:00.000
RQ V
----------------------- -----------
2014-01-01 00:00:00.000 10
2014-05-01 00:00:00.000 50
SELECT a.RQ,b.V
FROM @tb1 AS a
INNER JOIN @TB2 AS b ON a.RQ>=b.RQ
WHERE b.RQ=(SELECT MAX(RQ) FROM @TB2 WHERE RQ<=a.RQ)
SELECT T1.RQ,T3.V
FROM @tb1 T1
CROSS APPLY(
SELECT TOP 1 V FROM @TB2 T2
WHERE T1.RQ>=T2.RQ ORDER BY T2.RQ DESC
)T3