看板 Database 關於我們 聯絡資訊
※ 引述《SGMitchi14 (永不放棄)》之銘言: : (針對 SQL 語言的問題,用這個標題。請用 Ctrl+Y 砍掉這行) : 資料庫名稱:oracle SQL Developer : 資料庫版本:1.5.5 : 內容/問題描述: : 各位資料庫先進好,小弟是資料庫新手,自行看書並實際操作學習, : 最近遇到幾個棘手的問題,再懇請先進們指教,謝謝。 : 問題一:資料庫欄位含月份、ID,我想要計算ID歸戶後再累計 : 例如1月:1月同ID的人數 : 2月:1-2月中,同ID的人數【意即1-2月只要出現1次就只算1次】 : . : . : 6月:1-6月中,同ID的人數 : 以此類推... : 所以可能產生的結果: : 1月:3000人 : 2月:3500人【單獨只看2月也是3000人,但有500人是2月才出現,1月沒有出現過】 : 3月:4000人【單獨只看3月也是3000人,但有500人是3月才出現,1-2月沒有出現過】 : 請問這樣有什麼方式可以解決嗎? 我看起來應該是在問去重複的問題: declare V_MONTH int; V_COUNT int; V_RESULT int; begin V_COUNT := 0; --不知道你月份什麼格式 就先用yyyymm V_MONTH := TO_CHAR(ADD_MONTHS(trunc(SYSDATE, 'yyyy'), + V_COUNT), 'yyyymm'); while V_MONTH <= TO_CHAR(SYSDATE, 'yyyymm') loop select count(distinct ID) into V_RESULT from table where 月份 >= trunc(SYSDATE, 'yyyymm') --今年 and 月份 <= V_MONTH ; -- 看結果,檢視(V)打開下面有個DBMS輸出,綠十字選取連線。 DBMS_OUTPUT.PUT_LINE(V_MONTH || ' ' || V_COUNT || ' ' || V_RESULT); V_COUNT := V_COUNT + 1; V_MONTH := TO_CHAR(ADD_MONTHS(trunc(SYSDATE, 'yyyy'), + V_COUNT), 'yyyymm'); commit; end loop; end; : 問題二:我有一段語法,裡面有3段子查詢進行join,跑出來的筆數約80萬筆 : 執行時間約1分鐘,但要針對上述語法求每人每月的最大值 : 一直都跑不出來,試過跑了25分鐘還是跑不出來 : 請問有什麼部分需要注意呢? : 以上問題,再懇請先進們指教,謝謝 要嘛條件寫錯,要嘛沒index在table scan,若還有其他狀況就by case了。 -- 大哥不要說二哥 打落塵埃 這是要逆天的節奏阿 牛不飲水強按頭 不負如來不負卿 腳盆國 好言難勸該死的鬼 時來天地皆同力 運去英雄不自由 屠龍者終將成為惡龍 一劍破萬法 給 我破 給我開 生當做人傑 死亦為鬼雄 你不裝逼會死嗎 霓虹國 一力降十會 待我長髮及腰 天不生我*** **萬古如長夜 人生不如意十之** 東躲XC 開弓沒有回頭箭 冤仇要結就結到底 心之所向 素履以往 天下風雲出我輩 一入江湖歲月催 皇圖霸業談笑中 不勝人生一場醉 得之我幸 失之我命 閻王好見小鬼難纏 仗義每多屠狗輩 一隻穿雲箭 不拿一針一線 漂亮國 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.130.162.85 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Database/M.1668759613.A.EC8.html
SGMitchi14: 我來試試看您的方式,謝謝您的指教,謝謝 11/20 01:20