日期:2014-05-17  浏览次数:20498 次

求 SQL 查询方案



create table #aaaa
(
datet datetime,
value varchar(11)
);

insert into #aaaa values ('2013-10-23 09:00','0.5');
insert into #aaaa values ('2013-10-23 09:05','0.3');
insert into #aaaa values ('2013-10-23 09:10','0.5');
insert into #aaaa values ('2013-10-23 09:15','0.6');
insert into #aaaa values ('2013-10-23 09:20','0.1');
insert into #aaaa values ('2013-10-23 09:20','0.1');

insert into #aaaa values ('2013-10-23 09:30','0.2');
insert into #aaaa values ('2013-10-23 10:00','0.9');
insert into #aaaa values ('2013-10-23 10:05','0.3');
insert into #aaaa values ('2013-10-23 10:10','0.3');

insert into #aaaa values ('2013-10-23 10:20','0.3');

select * from #aaaa;



drop table #aaaa;


以上是我提供的测试SQL.
现在在 临时表中的 datet 数据应该是每5分钟就有一条数据。但是实际上表中的数据部是以每5分钟存储的。
请问大家,如何查询出的数据是以每5分钟为一条的数据。 
比如上面 没有 10:15的数据,那么查询出的结果  10:15对应的value 是0 。

数据有可能是跨好几天的数据查询,求方案。。

------解决方案--------------------
搞个参照表来匹配就可以了
------解决方案--------------------
做一张参照表,每5分钟一条记录
------解决方案--------------------
你自己补上
--初始化100条数据
CREATE TABLE #t (datet DATETIME,id INT IDENTITY(1,1))
INSERT INTO #t(datet) VALUES('2013-10-23 09:00')
DECLARE @i INT
SET @i=1 
WHILE @i<=100
BEGIN
INSERT INTO #t(datet)
SELECT DATEADD(mi,5,datet)
FROM #t
WHERE @i=id+1
SET @i=@i+1
END 
 
 --DROP TABLE #T
 SELECT *
 FROM #aaaa a right JOIN #t t ON t.datet = a.datet 
 /*
 datet                   value       datet                   id
----------------------- ----------- ----------------------- -----------
2013-10-23 09:00:00.000 0.5         2013-10-23 09:00:00.000 1
2013-10-23 09:05:00.000 0.3         2013-10-23 09:05:00.000 2
2013-10-23 09:10:00.000 0.5         2013-10-23 09:10:00.000 3
2013-10-23 09:15:00.000 0.6         2013-10-23 09:15:00.000 4
2013-10-23 09:20:00.000 0.1         2013-10-23 09:20:00.000 5
2013-10-23 09:20:00.000 0.1         2013-10-23 09:2