亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

SQL統計的難題

SQL統計的難題

智慧大石 2018-07-23 09:09:55
有一個表。用來存儲每一天的身高和體重記錄,有可能一天有幾條記錄,有可能這一天完全沒有記錄。我們可以按周統計這些記錄,希望通過一個存儲過程實現這樣效果:比如按周統計,那么SQL返回的記錄是從查詢的當天和前6天的記錄,如果某一天沒有記錄,不能不返回記錄,而是返回一個Height, Weight, Notes為空,日期為那一天的記錄。我們可以用CreatedDateTime > GETDATE() and CreatedDateTime < DATEADD(day, 6, GETDATE())來查詢當天到前6天的記錄,但問題是這樣如果7天中的某一天沒有記錄的情況,就會把這一天忽略,而不是自動補充一個。我想到可以用循環來做,針對每一天做循環,如果有數據就返回,如果沒有,自動填充Height, Weight, Notes并返回。不知哪位知道如何寫這個SQL存儲過程。
查看完整描述

3 回答

?
PIPIONE

TA貢獻1829條經驗 獲得超9個贊

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

查看完整回答
反對 回復 2018-07-25
?
呼如林

TA貢獻1798條經驗 獲得超3個贊

不是非常理解你的意思,能不能用大致查詢返回的表格的形式表達一下你需要的內容? 因為一天可能有幾條,那么如果某一天有多條的話,是select一個統計值(如avg)還是每一條都select出來?

查看完整回答
反對 回復 2018-07-25
?
阿波羅的戰車

TA貢獻1862條經驗 獲得超6個贊

我想知道你的需求是什么 你的邏輯好像并不清晰 不過如果僅僅是把每天沒有的顯示為默認值的話 只要建立一個作業就可以了

查看完整回答
反對 回復 2018-07-25
  • 3 回答
  • 0 關注
  • 880 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號