首页 新闻 搜索 专区 学院

SQL统计的难题

0
悬赏园豆:20 [已解决问题] 解决于 2008-08-29 14:17
有一个表。<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; CREATE TABLE HeathTracker<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; (<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; [ItemID] [int] NOT NULL IDENTITY(1, 1),<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; [CreatedDateTime] [datetime] NOT NULL,<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; [Height] [float] NOT NULL,<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; [Weight] [float] NOT NULL,<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; [Note] [ntext] NOT NULL<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; )<br>用来存储每一天的身高和体重记录,有可能一天有几条记录,有可能这一天完全没有记录。<br><br>我们可以按周统计这些记录,希望通过一个存储过程实现这样效果:比如按周统计,那么SQL返回的记录是从查询的当天和前6天的记录,如果某一天没有记录,不能不返回记录,而是返回一个Height, Weight, Notes为空,日期为那一天的记录。<br><br>我们可以用<br>CreatedDateTime &gt; GETDATE() and CreatedDateTime &lt; DATEADD(day, 6, GETDATE())<br>来查询当天到前6天的记录,但问题是这样如果7天中的某一天没有记录的情况,就会把这一天忽略,而不是自动补充一个。<br><br>我想到可以用循环来做,针对每一天做循环,如果有数据就返回,如果没有,自动填充Height, Weight, Notes并返回。<br><br>不知哪位知道如何写这个SQL存储过程。<br>
问题补充: 主要的难点在于如果某一天没有数据时的处理,如果没有数据,我希望不是忽略这一天的记录,而是自动补充一个。只是数据为空罢了。这是我唯一要解决的问题。
m2land的主页 m2land | 菜鸟二级 | 园豆:220
提问于:2008-08-26 17:02
< >
分享
最佳答案
0
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
roboth | 初学一级 |园豆:28 | 2008-08-27 09:26
其他回答(2)
0
不是非常理解你的意思,能不能用大致查询返回的表格的形式表达一下你需要的内容? 因为一天可能有几条,那么如果某一天有多条的话,是select一个统计值(如avg)还是每一条都select出来?
Gray Zhang | 园豆:17610 (专家六级) | 2008-08-26 17:07
0
我想知道你的需求是什么 你的逻辑好像并不清晰 不过如果仅仅是把每天没有的显示为默认值的话 只要建立一个作业就可以了
小眼睛老鼠 | 园豆:2774 (老鸟四级) | 2008-08-26 19:20
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册