填充中间相差的时间值
需求如下: 求出每个人每天最大的时间和最小的时间, 如果没有时, 也必须要生成数据.
DECLARE @AttRecords TABLE (AttTime DATETIME,Emp VARCHAR(8),Dept VARCHAR(1))
INSERT INTO @AttRecords
SELECT '2008-08-02 6:45','zhangsan','A' UNION ALL
SELECT '2008-08-02 18:20','zhangsan','A' UNION ALL
SELECT '2008-08-02 11:22','zhangsan','A' UNION ALL
SELECT '2008-08-02 18:20','zhangsan','A' UNION ALL
SELECT '2008-08-08 7:15','zhangsan','A' UNION ALL
SELECT '2008-08-08 19:12','zhangsan','A' UNION ALL
SELECT '2008-08-01 6:41','ww','A' UNION ALL
SELECT '2008-08-01 8:41','ww','A' UNION ALL
SELECT '2008-08-01 17:20','ww','A' UNION ALL
SELECT '2008-08-06 7:11','ww','A' UNION ALL
SELECT '2008-08-06 18:12','ww','A' UNION ALL
SELECT '2008-08-04 8:13','lisi','B'
select Emp,Dept , Min(AttTime) as minDate , max(AttTime) as maxDate
into #temp from @AttRecords
where Dept ='A'
group by Emp,Dept ,Convert(varchar(8),AttTime,112)
declare @MaxDate datetime
select @MaxDate = max(AttTime) from @AttRecords
declare @MinDate datetime
select @MinDate = min(AttTime) from @AttRecords
DECLARE @diffDay INT;
SET @diffDay = DATEDIFF(day,@MinDate,@MaxDate) + 1;
SET ROWCOUNT @diffDay;
SELECT ID=IDENTITY(INT,0,1) INTO #number FROM syscolumns;
SET ROWCOUNT 0
select
Convert(varchar(10), DateAdd(day,C.ID,@MinDate),120),
Convert(varchar(10),minDate,108),
convert(varchar(10),maxDate,108),
C.Emp,
C.Dept
from
(select * from #number cross join ( select distinct Emp,Dept from #temp) as T ) as C
left join #temp as B on B.Emp=C.Emp and datediff(day, DateAdd(day,C.ID,@MinDate) ,minDate) =0
order by Emp
drop table #temp
drop table #number
生成的SQL如下:
2008-08-01 06:41:00 17:20:00 ww A
2008-08-02 NULL NULL ww A
2008-08-03 NULL NULL ww A
2008-08-04 NULL NULL ww A
2008-08-05 NULL NULL ww A
2008-08-06 07:11:00 18:12:00 ww A
2008-08-07 NULL NULL ww A
2008-08-08 NULL NULL ww A
2008-08-01 NULL NULL zhangsan A
2008-08-02 06:45:00 18:20:00 zhangsan A
2008-08-03 NULL NULL zhangsan A
2008-08-04 NULL NULL zhangsan A
2008-08-05 NULL NULL zhangsan A
2008-08-06 NULL NULL zhangsan A
2008-08-07 NULL NULL zhangsan A
2008-08-08 07:15:00 19:12:00 zhangsan A
浙公网安备 33010602011771号