2014-09-05 2 views
1

I채우기 테이블의 간격을 날짜

id dt2 
1 2014-09-03 00:00:00.000 
2 NULL 
3 NULL 
4 NULL 
5 2014-09-06 00:00:00.000 
6 NULL 
7 NULL 
8 2014-09-09 00:00:00.000 

내가 이전 해당 날짜 으로 널 (null)을 채우기 위해 싶은 다음 표는 나의 결과 집합은 다음과 같이됩니다 있습니다

id dt2 
1 2014-09-03 00:00:00.000 
2 2014-09-03 00:00:00.000 
3 2014-09-03 00:00:00.000 
4 2014-09-03 00:00:00.000 
5 2014-09-06 00:00:00.000 
6 2014-09-06 00:00:00.000 
7 2014-09-06 00:00:00.000 
8 2014-09-09 00:00:00.000 

가장 쉬운 방법은 무엇입니까?

감사합니다.

답변

0

글쎄, 됐어! 아래 코드를 참조하십시오.

IF EXISTS (SELECT * FROM sys.objects 
WHERE object_id = OBJECT_ID(N'[dbo].[MyDates]')  AND type in (N'U')) 
DROP TABLE [dbo].[MyDates] 
GO 

SET ANSI_NULLS ON 
GO 

SET QUOTED_IDENTIFIER ON 
GO 

CREATE TABLE [dbo].[MyDates](
[id] [int] IDENTITY(1,1) NOT NULL, 
[dt] [datetime] NULL 
) ON [PRIMARY] 

GO 

insert into MyDates 
select convert(datetime,convert(date,getdate())) 
go 
insert into MyDates 
select null 
go 
insert into MyDates 
select null 
go 
insert into MyDates 
select convert(datetime,convert(date,getdate()+3)) 
go 
insert into MyDates 
select null 
go 
insert into MyDates 
select convert(datetime,convert(date,getdate()+8)) 
go 

--Before 
select * 
from Mydates 

--After 

;with Finish as 
(
    select isnull(b.id , a.id) id , a.dt , 
    case 
    when a.dt is null 
    then (select max(m.dt) from MyDates m where m.id <= isnull(b.id , a.id)) 
    else a.dt 
    end FullDt 
    from MyDates a 
    left join MyDates b 
    on a.dt <= b.dt 
) 

select Id, 
     max(coalesce (dt,FullDt)) FullDt 
from Finish 
group by id 
0

간격을 채우기 위해 업데이트 쿼리를 수행하면됩니다. 이 작업을 수행해야합니다.

UPDATE tablename 
SET tablename.dt2 = '2014-09-03 00:00:00.000' 
WHERE tablename.dt2 IS NULL; 
+0

하드 코딩 된 업데이트를 사용하고 싶지 않습니다. 또한 염두에두고 NULLS를 이전 날짜로 바꾸고 싶습니다 – hkravitz

+0

col "dt2"의 데이터 유형은 무엇입니까? – Justin

+0

날짜/시간입니다. 내 게시물에서 언급 한 출력을 반환하는 쿼리를 작성해야합니다. – hkravitz

관련 문제