22,210
社区成员
发帖
与我相关
我的任务
分享
USE tempdb
GO
IF OBJECT_ID('A') IS NOT NULL DROP TABLE A
IF OBJECT_ID('B') IS NOT NULL DROP TABLE B
GO
CREATE TABLE A([归集日期] datetime)
CREATE TABLE B([当前日期] DATETIME,[归集日期] datetime)
GO
SET NOCOUNT ON
INSERT INTO A VALUES ('2018-05-01')
INSERT INTO A VALUES ('2018-05-05')
INSERT INTO A VALUES ('2018-05-10')
GO
INSERT INTO B([当前日期])
SELECT DATEADD(DAY,sv.number,'2018-04-28')
FROM MASTER.dbo.spt_values sv WHERE sv.[type]='P' AND sv.number BETWEEN 0 AND 14
GO
----------- 以上为创建测试表及测试数据 ------------
;with cte as (
SELECT ROW_NUMBER() OVER (ORDER BY t1.[归集日期]) as rid,* FROM A AS t1
)
,cte2 AS (
SELECT t1.归集日期 as beginTime,isnull(t2.归集日期,t1.归集日期+5)-1 as endTime
FROM cte AS t1 LEFT JOIN cte AS t2 ON t1.rid=t2.rid-1
)
SELECT
t1.当前日期
,t2.beginTime as 归集日期
FROM B AS t1
LEFT JOIN cte2 AS t2 ON t1.[当前日期]
BETWEEN t2.beginTime and t2.endTime
/*
当前日期 归集日期
2018-04-28 00:00:00.000 NULL
2018-04-29 00:00:00.000 NULL
2018-04-30 00:00:00.000 NULL
2018-05-01 00:00:00.000 2018-05-01 00:00:00.000
2018-05-02 00:00:00.000 2018-05-01 00:00:00.000
2018-05-03 00:00:00.000 2018-05-01 00:00:00.000
2018-05-04 00:00:00.000 2018-05-01 00:00:00.000
2018-05-05 00:00:00.000 2018-05-05 00:00:00.000
2018-05-06 00:00:00.000 2018-05-05 00:00:00.000
2018-05-07 00:00:00.000 2018-05-05 00:00:00.000
2018-05-08 00:00:00.000 2018-05-05 00:00:00.000
2018-05-09 00:00:00.000 2018-05-05 00:00:00.000
2018-05-10 00:00:00.000 2018-05-10 00:00:00.000
2018-05-11 00:00:00.000 2018-05-10 00:00:00.000
2018-05-12 00:00:00.000 2018-05-10 00:00:00.000
*/
select B.B日期, (select max(A.日期) from A where A.日期 <= B.日期) A日期
from B
;with
a as
(select * from
(values(cast('2018-5-1' as date)),('2018-5-5'),('2018-5-10')
)as t(gjrq)
)
,b as
(select* from
(values(cast('2018-4-28' as date)),('2018-4-29'),('2018-4-30'),('2018-5-1'),('2018-5-2'),('2018-5-3'),('2018-5-4'),('2018-5-5'),('2018-5-6'),('2018-5-7'),('2018-5-8'),('2018-5-9'),('2018-5-10'),('2018-5-11'),('2018-5-12')
) as t(dqrq)
)
select dqrq 当前日期,max(a.gjrq)归集日期 from b left join a on b.dqrq >=a.gjrq group by b.dqrq
/*
当前日期 归集日期
2018-04-28 NULL
2018-04-29 NULL
2018-04-30 NULL
2018-05-01 2018-05-01
2018-05-02 2018-05-01
2018-05-03 2018-05-01
2018-05-04 2018-05-01
2018-05-05 2018-05-05
2018-05-06 2018-05-05
2018-05-07 2018-05-05
2018-05-08 2018-05-05
2018-05-09 2018-05-05
2018-05-10 2018-05-10
2018-05-11 2018-05-10
2018-05-12 2018-05-10
*/