SQL统计的难题

有一个表。用来存储每一天的身高和体重记录,有可能一天有几条记录,有可能这一天完全没有记录。我们可以按周统计这些记录,希望通过一个存储过程实现这样效果:比如按周统计,那么SQL返回的记录是从查询的当天和前6天的记录,如果某一天没有记录,不能不返回记录,而是返回一个Height, Weight, Notes为空,日期为那一天的记录。我们可以用CreatedDateTime > GETDATE() and CreatedDateTime < DATEADD(day, 6, GETDATE())来查询当天到前6天的记录,但问题是这样如果7天中的某一天没有记录的情况,就会把这一天忽略,而不是自动补充一个。我想到可以用循环来做,针对每一天做循环,如果有数据就返回,如果没有,自动填充Height, Weight, Notes并返回。不知哪位知道如何写这个SQL存储过程。

智慧大石
浏览 808回答 3
3回答

PIPIONE

1:其实我感觉没有那么复杂。我们只关心他们的差就可以了。 --variables DECLARE @t table(ItemId int identity,CreatedTime datetime,height float,weight float,note ntext) DECLARE @i int --prepare data SET @i=1 WHILE @i<12 BEGIN INSERT INTO @t select DATEADD(day,@i,GETDATE()),@i,@i,'test'+CAST(@i as nvarchar(4000)) SET @i=@i+1 END --add mutiple data INSERT INTO @t select DATEADD(day,3,GETDATE()),4,4,'test'+CAST(4 as nvarchar(4000)) --delete one data delete @t where Itemid=4 --display all SELECT * FROM @t DECLARE @param datetime SEt @param=DATEADD(day,3,GETDATE()) SELECT *,DateDiff(day,CreatedTime,@param) as interval FROM @t --1 2008-08-28 09:29:51.810 1 1 test1 2 --2 2008-08-29 09:29:51.810 2 2 test2 1 --3 2008-08-30 09:29:51.810 3 3 test3 0 --5 2008-09-01 09:29:51.810 5 5 test5 -2 --6 2008-09-02 09:29:51.810 6 6 test6 -3 --7 2008-09-03 09:29:51.810 7 7 test7 -4 --8 2008-09-04 09:29:51.810 8 8 test8 -5 --9 2008-09-05 09:29:51.810 9 9 test9 -6 --10 2008-09-06 09:29:51.810 10 10 test10 -7 --11 2008-09-07 09:29:51.810 11 11 test11 -8 --12 2008-08-30 09:29:51.810 4 4 test4 0

呼如林

不是非常理解你的意思,能不能用大致查询返回的表格的形式表达一下你需要的内容? 因为一天可能有几条,那么如果某一天有多条的话,是select一个统计值(如avg)还是每一条都select出来?

阿波罗的战车

我想知道你的需求是什么 你的逻辑好像并不清晰 不过如果仅仅是把每天没有的显示为默认值的话 只要建立一个作业就可以了
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

SQL Server