Re: [SQL ] 滾動計算並回傳

看板Database (資料庫)作者 ( )時間3年前 (2020/10/06 13:33), 3年前編輯推噓0(006)
留言6則, 1人參與, 3年前最新討論串3/8 (看更多)
※ 引述《MOONY135 (談無慾)》之銘言: : ※ 引述《Wengboyu ( )》之銘言: : 這東西看起來就是準備最後的報表類 而且資料算是已經都不會再新增的 : 建議作法是 : 直接把a table的每一筆資料都取出來 丟進去算 : 最後塞到c結算table裡面 用排程去慢慢跑 : 不要想著一次就全部撈出來而且每次都直接算新的 : //==== : 剛剛想到更新的做法 : 從TABLE a取出最老的日期 然後把那個日期跟到今天的日期弄成另外一張table : table 欄位大概就是 : day is_done : 20200101 1 : 20200102 0 : . : . : . : 202001005 0 : 然後開始 用那個日期去撈b : count(*) between year_of_day : and day GROUP BY docter_id : 就好了 : 排程5~10秒做一次 一次處理一天 : 三個多小時可以做完一年的份量 非常感謝你的建議,我原先的code跑了2整天還是依然沒有結果(放棄) 排程分次跑,可能比較有機會能夠完成 你提到的這個想法我曾經考慮過 但doctor_id大約有2000筆,時間長度大概有6年 考慮到這樣的運算量,就放棄了這個作法 (不過現在想起來,原先code的寫法不會比這個省) 另一個我曾經考慮過的想法是維持原先的code 只是每算出一筆 就把a.date, a.doctor, doctor_service_volume存到另一個dataset temp 然後在每次運算前,就去找temp是不是已經有算出的結果 如果有就直接讀取,沒有就運算原先的code,然後把結果在存到temp 這樣就可能節省運算量 但我不知道sql能不能做這樣的操作,我也不知道該怎麼寫 可能分排程或你建議的方法,兩者花費的時間會相當接近 讓我花點時間試試看,如果大家有什麼想法也歡迎提出討論 感謝 : : 資料庫名稱:SAS SQL : : b.prescriptiondate between a.prescriptionBeginDate and : : intnx('year', a.PrescriptionBeginDate, -1, 'same')) : : as service_volume : : from : : dataset a, dataset b; : : quit; : : 因為跑很久,我不太確定這樣寫是不是可以得到我要的結果.. : : table a 有240萬筆,b有1600萬筆 : : 如果大家要測試自己code寫得對不對,會怎麼弄? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.174.43.32 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Database/M.1601962411.A.282.html ※ 編輯: Wengboyu (1.174.43.32 臺灣), 10/06/2020 13:36:30

10/06 22:34, 3年前 , 1F
如果用單一日期再用between 撈不出來 那應該也沒啥辦法
10/06 22:34, 1F

10/06 22:34, 3年前 , 2F
10/06 22:34, 2F

10/06 22:35, 3年前 , 3F
你的是兩百四十萬筆去join 這個是一筆一筆去排程做完
10/06 22:35, 3F

10/06 22:36, 3年前 , 4F
十秒撈一次 一次撈五天就好 大概也是兩三天就做完
10/06 22:36, 4F

10/06 22:38, 3年前 , 5F
分批做才是正確的 一次撈db會死給你看 更別說還有其他
10/06 22:38, 5F

10/06 22:38, 3年前 , 6F
存取
10/06 22:38, 6F
文章代碼(AID): #1VV06hA2 (Database)
文章代碼(AID): #1VV06hA2 (Database)