全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:5872
推到 Plurk!
推到 Facebook!

請教SQL語法~日統計及週統計

尚未結案
seedbcc
高階會員


發表:232
回覆:272
積分:105
註冊:2003-12-10

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-06-19 20:43:17 IP:211.76.xxx.xxx 未訂閱
我的資料庫是ORACLE及access 若有個TABLE內如下: REC MDATE amOUNT 序號 日期 數量 1 1/1 AM1:00 5 2 1/1 am1:00 2 3 1/2 am3:00 1 4 1/3 pm5:00 5 5 1/5 am3:00 1 6 1/5 pm4:00 1 我要如何用 SQL 語法 ,做日統計 也就是若有數筆同一天 數筆另一天 數其它天 ,如上述資料 能統計成 1 1/1 7 2 1/2 1 3 1/3 5 4 1/5 2 可以用sql語法做到這樣子嗎 另外 還有週統計,資料table如上述 (ps:我可以自訂 週的統計範圍 為 本週三到下週二 視為同一週嗎) (這些統計 方式 可以用 sql語法做到嗎
James
高階會員


發表:10
回覆:290
積分:220
註冊:2002-07-25

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-06-19 21:55:58 IP:220.134.xxx.xxx 未訂閱
如果是 Oracle 的話 , 那您可以試試看 select ROUND(MDATE, 'day'), sum(amOUNT) from yourtable group by ROUND(MDATE, 'day')
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-06-20 08:57:19 IP:202.62.xxx.xxx 未訂閱
您好﹗    Access資料庫形態可用﹕ Select Date(MDATE) AS 日期, Count(*) From 資料表 Group By Date(MDATE)    ================================= 有空來瞅瞅我﹗因為我是您的朋友﹐有您真好﹗ ================================
------
忻晟
seedbcc
高階會員


發表:232
回覆:272
積分:105
註冊:2003-12-10

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-06-20 09:30:17 IP:221.169.xxx.xxx 未訂閱
月及年 就是把'day' 改成 'month'及 'year' day 好像是 週統計 那日 統計 跟 季統計 請教要用什麼 字 另外 可否自訂 每週 每月 每季的起始日 發表人 - seedbcc 於 2005/06/20 09:34:32
Fishman
尊榮會員


發表:120
回覆:1949
積分:2163
註冊:2006-10-28

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-06-20 09:38:47 IP:210.65.xxx.xxx 未訂閱
HI SEEDBCC,    SORRY !! 有點筆誤,修正一下,順便回覆季統計的問題    IN ORACLE :
1. 日統計
SELECT  TRUNC(MDATE) DT,
        SUM(AMOUNT)
FROM    YOURTABLE
GROUP BY 
        TRUNC(MDATE)    2.週統計
SELECT  TO_CHAR(MDATE - (NVL(:P,0)-1),'IYYY/IW') WK,
        SUM(AMOUNT)
FROM    YOURTABLE
GROUP BY
        TO_CHAR(MDATE - (NVL(:P,0)-1),'IYYY/IW')
其中 :P 為參數,決定你要統計範圍起始星期?(0~6,分別表星期日、星期一?星期二‧‧‧)    若是要以系統日自動分,可將 :P 用  TO_NUMBER(TO_CHAR(:P,'D') - 1) 替換掉即可    3.月統計        
SELECT  TO_CHAR(MDATE,'YYYY/MM') MO,
        SUM(AMOUNT)
FROM    YOURTABLE
GROUP BY
        TO_CHAR(MDATE,'YYYY/MM')    3.季統計
SELECT  TO_CHAR(MDATE,'YYYY')   '/Q'   TO_CHAR(MDATE,'Q') QT,
        SUM(AMOUNT)
FROM    YOURTABLE
GROUP BY
        TO_CHAR(MDATE,'YYYY')   '/Q'   TO_CHAR(MDATE,'Q')    4.年統計
SELECT  TO_CHAR(MDATE,'YYYY') YR,
        SUM(AMOUNT)
FROM    YOURTABLE
GROUP BY
        TO_CHAR(MDATE,'YYYY')    
發表人 -
------
Fishman
seedbcc
高階會員


發表:232
回覆:272
積分:105
註冊:2003-12-10

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-06-20 10:09:13 IP:221.169.xxx.xxx 未訂閱
再請教一下 月的統計 我可否自訂從 幾號 開始 做為該月起始日 季的統計 我可否自訂從 幾月 開始 做為該季起始月
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-06-20 11:27:58 IP:202.62.xxx.xxx 未訂閱
您好﹗    在SQL敘述中加上Where 日期 Between 開始日期值 And 結束日期值的子句即可 ================================= 有空來瞅瞅我﹗因為我是您的朋友﹐有您真好﹗ ================================
------
忻晟
seedbcc
高階會員


發表:232
回覆:272
積分:105
註冊:2003-12-10

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-06-20 11:35:57 IP:221.169.xxx.xxx 未訂閱
cashxin2002兄 你可能誤解了 我要的自訂起始日 是指 在月統計或季統計或年統計時 自訂 月是從幾號算起 ex:1/3~2/2,2/3~3/2,..... 季是從幾月算起 EX:第一季 2~4,第二季5~7,.... 年是從幾月算起 EX:92年度:92/5/1~93/4/30, 93年度 93/5/1~94/4/30 另外想請教的是 access 資料庫 上述各位大大的寫法 如何改寫 發表人 - seedbcc 於 2005/06/20 13:19:42
Fishman
尊榮會員


發表:120
回覆:1949
積分:2163
註冊:2006-10-28

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-06-20 17:03:10 IP:210.65.xxx.xxx 未訂閱
Hi seedbcc,    基本用法同上述週的應用方法,先加減一個基礎數字,再做型別轉換來達到目的
1.
SELECT  TO_CHAR(MDATE - (NVL(:P,0)-1),'YYYY/MM'),
        SUM(AMOUNT)
FROM    YOURTABLE
GROUP BY
        TO_CHAR(MDATE - (NVL(:P,0)-1),'YYYY/MM')    2.
SELECT  TO_CHAR(MDATE - (TO_NUMBER(TO_CHAR((NVL(:P,TRUNC(SYSDATE,'YEAR'))),'DDD')) - 1),'YYYY/Q'),
        SUM(AMOUNT)
FROM    YOURTABLE
GROUP BY
        TO_CHAR(MDATE - (TO_NUMBER(TO_CHAR((NVL(:P,TRUNC(SYSDATE,'YEAR'))),'DDD')) - 1),'YYYY/Q')
---------------------------------- 小弟才疏學淺,若有謬誤尚請不吝指教 ----------------------------------
------
Fishman
seedbcc
高階會員


發表:232
回覆:272
積分:105
註冊:2003-12-10

發送簡訊給我
#10 引用回覆 回覆 發表時間:2005-06-20 17:29:14 IP:221.169.xxx.xxx 未訂閱
季的部份會出現下述bug inconsistent datatypes:expected NUMBER got DATE 另外,跨年不知如何寫呢 2004/6/1~2005/5/31,2005/6/1~2006/5/30 另外想請教的是 access 資料庫 上述各位大大的寫法 如何改寫 發表人 - seedbcc 於 2005/06/20 17:54:44
Fishman
尊榮會員


發表:120
回覆:1949
積分:2163
註冊:2006-10-28

發送簡訊給我
#11 引用回覆 回覆 發表時間:2005-06-21 08:39:27 IP:210.65.xxx.xxx 未訂閱
Hi seedbcc,
SELECT  TO_CHAR(ADD_MONTHS(MDATE,(NVL(:P - 1,0))* -1),'YYYY/Q'),
        SUM(AMOUNT)
FROM    YOURTABLE
GROUP BY
        TO_CHAR(ADD_MONTHS(MDATE,(NVL(:P - 1,0))* -1),'YYYY/Q')
發表人 -
------
Fishman
seedbcc
高階會員


發表:232
回覆:272
積分:105
註冊:2003-12-10

發送簡訊給我
#12 引用回覆 回覆 發表時間:2005-06-21 09:46:44 IP:221.169.xxx.xxx 未訂閱
SELECT TO_CHAR(MDATE,'YYYY') '/Q' TO_CHAR(MDATE,'Q') QT, SUM(AMOUNT) FROM YOURTABLE GROUP BY TO_CHAR(MDATE,'YYYY') '/Q' TO_CHAR(MDATE,'Q') 會出現下述bug inconsistent datatypes:expected NUMBER got DATE 另外請教的是 您的季 統計語法 是不同年的同一季相加嗎 我的結果是要像如此 2004/3-5 2004/6-8 2004/9-11 2004/12-2005/2 2005/3-5 2005/6-8 其中 2004/3-5 跟 2005/3-5是分開的 ,而不做相加 發表人 - seedbcc 於 2005/06/21 11:28:09
seedbcc
高階會員


發表:232
回覆:272
積分:105
註冊:2003-12-10

發送簡訊給我
#13 引用回覆 回覆 發表時間:2005-06-21 09:53:36 IP:221.169.xxx.xxx 未訂閱
還有 自訂 年的起始月 不知要如何寫
seedbcc
高階會員


發表:232
回覆:272
積分:105
註冊:2003-12-10

發送簡訊給我
#14 引用回覆 回覆 發表時間:2005-06-23 09:12:05 IP:221.169.xxx.xxx 未訂閱
再麻煩Fishman 大大了 上面二個問題 我還是 試不太出來
Fishman
尊榮會員


發表:120
回覆:1949
積分:2163
註冊:2006-10-28

發送簡訊給我
#15 引用回覆 回覆 發表時間:2005-06-23 10:25:55 IP:210.65.xxx.xxx 未訂閱
Hi seedbcc,    
SELECT  TO_CHAR(ADD_MONTHS(DT,(NVL(:P - 1,0))* -1),'YYYY/Q') QT,
        TO_CHAR(MIN(DT),'YYYY/MM') || '~' || TO_CHAR(MAX(DT),'YYYY/MM') RANGE,
        SUM(CNT)
FROM    AAA
GROUP BY
        TO_CHAR(ADD_MONTHS(DT,(NVL(:P - 1,0))* -1),'YYYY/Q')
其中 :P 即為起始月份 :P=1結果 :P=2結果 PS : 測試資料區間 2003/01/01~2005/12/31 ---------------------------------- 小弟才疏學淺,若有謬誤尚請不吝指教 ----------------------------------
------
Fishman
seedbcc
高階會員


發表:232
回覆:272
積分:105
註冊:2003-12-10

發送簡訊給我
#16 引用回覆 回覆 發表時間:2005-06-23 10:44:38 IP:221.169.xxx.xxx 未訂閱
還有一個問題就是->跨年的計算呢 從三月 當成一個年度 2000/3~2001/2 2001/3~2002/2 2002/3~2003/2 2003/3~2004/2 2004/3~2005/2 從五月 當成一個年度 2000/5~2001/4 2001/5~2002/4 2002/5~2003/4 2003/5~2004/4 2004/5~2005/4 因為 查不到help的文件 所以想再問一下
Fishman
尊榮會員


發表:120
回覆:1949
積分:2163
註冊:2006-10-28

發送簡訊給我
#17 引用回覆 回覆 發表時間:2005-06-23 12:43:59 IP:210.65.xxx.xxx 未訂閱
Hi seedbcc,
SELECT  TO_CHAR(ADD_MONTHS(DT,(NVL(:P - 1,0))* -1),'YYYY') YR,
        TO_CHAR(MIN(DT),'YYYY/MM') || '~' || TO_CHAR(MAX(DT),'YYYY/MM') RANGE,
        SUM(CNT)
FROM    AAA
GROUP BY
        TO_CHAR(ADD_MONTHS(DT,(NVL(:P - 1,0))* -1),'YYYY')
:P 用法同上 ---------------------------------- 小弟才疏學淺,若有謬誤尚請不吝指教 ----------------------------------
------
Fishman
seedbcc
高階會員


發表:232
回覆:272
積分:105
註冊:2003-12-10

發送簡訊給我
#18 引用回覆 回覆 發表時間:2005-06-23 13:20:11 IP:221.169.xxx.xxx 未訂閱
非常感謝各位的回答 尤其是fishman大大
系統時間:2024-11-25 23:44:17
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!