發表文章

目前顯示的是有「DBsQL」標籤的文章

MySQL RAND()

MySQL 亂數取值 select FIELD1, FIELD2, FIELD3 from TABLE_NAME order by rand() limit 10 其中 order by rand() 表示 依據亂數、隨機排列,後面的 limit 10 是從已經隨機排列的佇列當中取出10筆。 若 select FIELD1, FIELD2, FIELD3 from TABLE_NAME where {條件} order by rand() limit 10 效能提高的方式是加上 where 條件以後、再隨機排列的佇列,筆數比較少的狀況下、有可能少於10筆,但此時limit 10 不會出現sql錯誤。 MySQL 的 RAND()函式 不適用大筆數的資料佇列,也有人說超過100筆的RAND()會有問題(但沒說是哪個版本MYSQL)。 或者也可以先把一固定數量資料取出後,透過 java script 函式 Math.random(); 取亂數; 或者 java.lang 套件中的 Math類別就定義了一個方法 random()。 【java 參考】 http://blog.xuite.net/x_3kkk/java/11965398 http://www.fg.tp.edu.tw/~anny/java/03_paper.doc (網路檔案下載請注意防毒) 【MySQL 語法相關參考】 http://www.desilva.biz/mysql/random.html http://bbs.ecstart.com/viewthread.php?tid=14670&extra=page%3D1 http://dev.mysql.com/doc/refman/4.1/en/select.html

oracle outer join

SQL 外部連接 /*..... . SELECT A1.store_name, SUM(A2.Sales) SALES FROM Georgraphy A1, Store_Information A2 WHERE A1.store_name = A2.store_name (+) GROUP BY A1.store_name 這裡是使用了 Oracle 的外部連接語法。 . .....*/

(MySQL Math Function) max and min

======= 筆記開始========= ** 每日紀錄 is written by a source which can record-down the history rate for each unique rowdata. /******** 清點每日紀錄資料筆數 OR 將每日紀錄清除 select count(*) OR delete from 每日紀錄 where RPDATE=CURDATE() *****/ /******** 檢查每組 RPDATE 有多少筆 (每天RUN出多少筆) select RPDATE, count(*) from 每日紀錄 group by RPDATE *****/ /******** 擷取符合條件的昨天&&七天前內的兩日資料,確認是否資料 curdate()=9/26 取得 9/19 , 9/25 的資料 ( should be 9/25 - 9/19 ) select RPDATE, count(*) from 每日紀錄 where (TO_DAYS(CURDATE())-TO_DAYS(RPDATE))=7 or(TO_DAYS(CURDATE())-TO_DAYS(RPDATE))=1 group by RPDATE *****/ /******************* 進入正題:抓取符合條件的TOP30 送入 每日紀錄_WEEKLYTOP30 (目前沒有七天以前的資料暫以這兩天資料相比較) 本週TOP30: select ID, TOPIC, max(GRADDING)-min(GRADDING) compGrad, count(*) phNBR from 每日紀錄 where (TO_DAYS(CURDATE())-TO_DAYS(RPDATE))=7 or (TO_DAYS(CURDATE())-TO_DAYS(RPDATE))=1 group by ID having phNBR >1 order by compGrad desc limit 30 next: 另起程式LOOP 把以上符合條件的TOP30 insert into 每日紀錄_WEEKLYTOP30 next: 週排行的source is ready for on-line routine job :確定每日紀...

(oracle 筆記) create sequence

如果想用sequence 當PK ,就得先建立一個sequence 物件 -- 建立一個sequence, 可指定每次加1,自動加1,最小值以及最大值 create sequence {TheNameForSequence} start with 1 increment by 1 MINVALUE 1 MAXVALUE 99999999; -- 建立TABLE { target_table } (略,不過請把要抓取sequence 的欄位datatype設為NUMBER,可以不限定長度) -- 新增一筆資料進入這個TABLE 使用上述 sequence: insert into target_table (PK_column, column2, column3) values ( {TheNameForSequence}.nextval, "column2.value", "column3.value" ); -- 可以查詢目前 sequence 幾多號 SQL> show sequence {TheNameForSequence} ; -- 其他參數 CACHE 20 (預設值) NOORDER (預設值) NOCYCLE (預設值) NOORDER or ORDER 不能跟 NOCACHE 一起用 -- sequence 的好處 可以讓oracle 自動幫你找到一個unique的KEY (如果你完全只使用預設參數的話,絕對可以抓到唯一的sequence,除非.....用完了 >___ -- 最末 PK 要用 sequence 還是 varchar2,個人認為應該是要看你的PK有沒有可能需要手動編碼OR需要被修改,如果都不需要修改的話,sequence 當PK是可以的。 -- reference http://www.oracle.com/technology/products/rdb/pdf/0307_sequences.pdf