sql關於連續日期的統計報表問題
這是另一個個關於連續日期的統計報表問題~~
客戶編號 物品名稱 訂購日期 數量 單價
A001 A 2006/11/01 1 50
A001 A 2006/11/02 2 50
A001 A 2006/11/03 4 50
A001 A 2006/11/05 3 50
A001 C 2006/11/06 2 30
A001 C 2006/11/07 2 30
QUESTION:可否利用一條sql語法求得以下結果
附註條件 1.客戶編號、物品名稱必須為相同資料,
2.開始日期與結束日期必須為連續日期,才可將合併為一筆資料
客戶編號 物品名稱 開始日期 結束日期 數量 單價 小計
A001 A 2006/11/01 2006/11/03 7 50 350
A001 A 2006/11/05 2006/11/05 3 50 150
A001 C 2006/11/06 2006/11/07 4 30 120
[@more@]A001 A 2006/11/01 1 50
A001 A 2006/11/02 2 50
A001 A 2006/11/03 4 50
A001 A 2006/11/05 3 50
A001 C 2006/11/06 2 30
A001 C 2006/11/07 2 30
QUESTION:可否利用一條sql語法求得以下結果
附註條件 1.客戶編號、物品名稱必須為相同資料,
2.開始日期與結束日期必須為連續日期,才可將合併為一筆資料
客戶編號 物品名稱 開始日期 結束日期 數量 單價 小計
A001 A 2006/11/01 2006/11/03 7 50 350
A001 A 2006/11/05 2006/11/05 3 50 150
A001 C 2006/11/06 2006/11/07 4 30 120
answer:
SQL> SELECT * FROM T;
ID NAME TIME NUM CHR
---------- ---------- ---------- ---------- ----------
A001 A 23-11月-06 2 50
A001 A 24-11月-06 3 50
A001 C 29-11月-06 2 30
A001 A 25-11月-06 5 50
A001 A 27-11月-06 6 50
A001 C 28-11月-06 2 30
已選取 6 個資料列.
SQL> SELECT B.ID, B.NAME, MIN(TO_CHAR(B.TIME, 'YYYY/MM/DD')) STARTDATE,
2 MAX(TO_CHAR(B.TIME, 'YYYY/MM/DD')) END_TIME, SUM(NUM),CHR,SUM(CHR)
3 FROM (SELECT A.*, TO_NUMBER(TO_CHAR(A.TIME, 'YYYYMMDD') - ROWNUM) CC
4 FROM (SELECT * FROM T ORDER BY TIME, NAME) A) B
5 GROUP BY B.NAME, B.CC, B.ID,B.CHR;
ID NAME STARTDATE END_TIME SUM(NUM) CHR SUM(CHR)
---------- ---------- ---------- ---------- ---------- ---------- ----------
A001 A 2006/11/23 2006/11/25 10 50 150
A001 A 2006/11/27 2006/11/27 6 50 50
A001 C 2006/11/28 2006/11/29 4 30 60
ID NAME TIME NUM CHR
---------- ---------- ---------- ---------- ----------
A001 A 23-11月-06 2 50
A001 A 24-11月-06 3 50
A001 C 29-11月-06 2 30
A001 A 25-11月-06 5 50
A001 A 27-11月-06 6 50
A001 C 28-11月-06 2 30
已選取 6 個資料列.
SQL> SELECT B.ID, B.NAME, MIN(TO_CHAR(B.TIME, 'YYYY/MM/DD')) STARTDATE,
2 MAX(TO_CHAR(B.TIME, 'YYYY/MM/DD')) END_TIME, SUM(NUM),CHR,SUM(CHR)
3 FROM (SELECT A.*, TO_NUMBER(TO_CHAR(A.TIME, 'YYYYMMDD') - ROWNUM) CC
4 FROM (SELECT * FROM T ORDER BY TIME, NAME) A) B
5 GROUP BY B.NAME, B.CC, B.ID,B.CHR;
ID NAME STARTDATE END_TIME SUM(NUM) CHR SUM(CHR)
---------- ---------- ---------- ---------- ---------- ---------- ----------
A001 A 2006/11/23 2006/11/25 10 50 150
A001 A 2006/11/27 2006/11/27 6 50 50
A001 C 2006/11/28 2006/11/29 4 30 60
另外請教一個問題
我自己試著用別的方法寫了一個語法 ,
但是這個語法無法判斷連續日期的問題耶~~請大家幫我看看,問題出在那裡?
select DISTINCT ID ,NAME
, min(TIME)over(partition by ID ,NAME) STARTDATE
, max(TIME)over(partition by ID ,NAME) END_TIME
, SUM(NUM)over(partition by ID ,NAME) NUM
,CHR
,SUM(NUM)over(partition by ID ,NAME) *CHR "TOTAL"
from TMP_ORDER
我自己試著用別的方法寫了一個語法 ,
但是這個語法無法判斷連續日期的問題耶~~請大家幫我看看,問題出在那裡?
select DISTINCT ID ,NAME
, min(TIME)over(partition by ID ,NAME) STARTDATE
, max(TIME)over(partition by ID ,NAME) END_TIME
, SUM(NUM)over(partition by ID ,NAME) NUM
,CHR
,SUM(NUM)over(partition by ID ,NAME) *CHR "TOTAL"
from TMP_ORDER
SQL> SELECT DISTINCT ID, NAME,
2 MIN(TIME) over(PARTITION BY ID, NAME, TO_NUMBER(TO_CHAR(A.TIME, 'YYYYMMDD') - ROWNUM))
STARTDATE,
3 MAX(TIME) over(PARTITION BY ID, NAME, TO_NUMBER(TO_CHAR(A.TIME, 'YYYYMMDD') - ROWNUM))
END_TIME,
4 SUM(NUM) over(PARTITION BY ID, NAME, TO_NUMBER(TO_CHAR(A.TIME, 'YYYYMMDD') - ROWNUM)) N
UM,
5 CHR,
6 SUM(NUM) over(PARTITION BY ID, NAME, TO_NUMBER(TO_CHAR(A.TIME, 'YYYYMMDD') - ROWNUM)) *
CHR "TOTAL"
7 FROM (SELECT * FROM t ORDER BY TIME) a;
ID NAME STARTDATE END_TIME NUM CHR TOTAL
---------- ---------- ---------- ---------- ---------- ---------- ----------
A001 A 23-11月-06 25-11月-06 10 50 500
A001 A 27-11月-06 27-11月-06 6 50 300
A001 C 28-11月-06 29-11月-06 4 30 120
2 MIN(TIME) over(PARTITION BY ID, NAME, TO_NUMBER(TO_CHAR(A.TIME, 'YYYYMMDD') - ROWNUM))
STARTDATE,
3 MAX(TIME) over(PARTITION BY ID, NAME, TO_NUMBER(TO_CHAR(A.TIME, 'YYYYMMDD') - ROWNUM))
END_TIME,
4 SUM(NUM) over(PARTITION BY ID, NAME, TO_NUMBER(TO_CHAR(A.TIME, 'YYYYMMDD') - ROWNUM)) N
UM,
5 CHR,
6 SUM(NUM) over(PARTITION BY ID, NAME, TO_NUMBER(TO_CHAR(A.TIME, 'YYYYMMDD') - ROWNUM)) *
CHR "TOTAL"
7 FROM (SELECT * FROM t ORDER BY TIME) a;
ID NAME STARTDATE END_TIME NUM CHR TOTAL
---------- ---------- ---------- ---------- ---------- ---------- ----------
A001 A 23-11月-06 25-11月-06 10 50 500
A001 A 27-11月-06 27-11月-06 6 50 300
A001 C 28-11月-06 29-11月-06 4 30 120
我又發現了一個問題..
相同ID,NAME,及TIME 會有二筆記錄耶
ID NAME TIME NUM CHR
------------ --------- ------------------ ---------- --------------
A001 A 2006/11/1 5 50.00
A001 A 2006/11/2 2 50.00
A001 A 2006/11/3 3 35.00
A001 A 2006/11/5 1 50.00
A001 B 2006/11/4 1 30.00
A001 B 2006/11/5 2 30.00
A001 B 2006/11/5 5 30.00
A001 C 2006/11/6 15 20.00
A001 C 2006/11/7 2 20.00
A001 C 2006/11/8 3 20.00
請問可以將相同ID,NAME,日期的資料
日期有可能重覆,也有可能是連續的,
請問這樣的問題有辦法可以解決嗎?
ID NAME STARTDATE END_TIME NUM CHR TOTAL
---------- ---------- ---------- ---------- ---------- ---------- ----------
A001 A 2006/11/1 2006/11/2 7 50.00 350
A001 A 2006/11/3 2006/11/3 3 35.00 105
A001 A 2006/11/5 2006/11/5 1 50.00 50
A001 B 2006/11/4 2006/11/5 8 30.00 240
A001 C 2006/11/6 2006/11/8 20 20.00 400
相同ID,NAME,及TIME 會有二筆記錄耶
ID NAME TIME NUM CHR
------------ --------- ------------------ ---------- --------------
A001 A 2006/11/1 5 50.00
A001 A 2006/11/2 2 50.00
A001 A 2006/11/3 3 35.00
A001 A 2006/11/5 1 50.00
A001 B 2006/11/4 1 30.00
A001 B 2006/11/5 2 30.00
A001 B 2006/11/5 5 30.00
A001 C 2006/11/6 15 20.00
A001 C 2006/11/7 2 20.00
A001 C 2006/11/8 3 20.00
請問可以將相同ID,NAME,日期的資料
日期有可能重覆,也有可能是連續的,
請問這樣的問題有辦法可以解決嗎?
ID NAME STARTDATE END_TIME NUM CHR TOTAL
---------- ---------- ---------- ---------- ---------- ---------- ----------
A001 A 2006/11/1 2006/11/2 7 50.00 350
A001 A 2006/11/3 2006/11/3 3 35.00 105
A001 A 2006/11/5 2006/11/5 1 50.00 50
A001 B 2006/11/4 2006/11/5 8 30.00 240
A001 C 2006/11/6 2006/11/8 20 20.00 400
SQL> SELECT DISTINCT ID, NAME,
2 MIN(TIME) over(PARTITION BY ID, NAME, TO_NUMBER(TO_CHAR(A.TIME, 'YYYYMMDD') - ROWNUM))
STARTDATE,
3 MAX(TIME) over(PARTITION BY ID, N ...
7 FROM (SELECT * FROM t ORDER BY TIME) a;------>SELECT ID,NAME,to_char(TIME,'yyyy/mm/dd'),sum(num),chr FROM t GROUP BY ID,NAME,to_char(TIME,'yyyy/mm/dd'),num,chr ORDER BY name,to_char(TIME,'yyyy/mm/dd');
2 MIN(TIME) over(PARTITION BY ID, NAME, TO_NUMBER(TO_CHAR(A.TIME, 'YYYYMMDD') - ROWNUM))
STARTDATE,
3 MAX(TIME) over(PARTITION BY ID, N ...
7 FROM (SELECT * FROM t ORDER BY TIME) a;------>SELECT ID,NAME,to_char(TIME,'yyyy/mm/dd'),sum(num),chr FROM t GROUP BY ID,NAME,to_char(TIME,'yyyy/mm/dd'),num,chr ORDER BY name,to_char(TIME,'yyyy/mm/dd');
t
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9925929/viewspace-915614/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 關於數字的經典SQL程式設計:連續範圍問題SQL程式設計
- 關於日期計算的問題 (轉)
- 關於表資料行統計的問題和相關誤區
- 大資料開發-Hive-常用日期函式&&日期連續題sql套路大資料Hive函式SQL
- 關於全問檢索按照日期的排序問題排序
- 關於mysql連線的問題MySql
- 關於連線池的問題!
- 統計報表 -- sql統計語句SQL
- 關於最近3天連續加班解決登陸問題的總結
- 關於jetty連線關閉問題Jetty
- 關於@override報錯的問題IDE
- 如何解決報表關聯計算中的效能問題
- 關於SSH中對於action的監聽問題(關於系統計數)
- 請問,關於資料庫連線的問題。資料庫
- 關於SQL的重複記錄問題SQL
- 續:關於許可權系統的設計
- pl/sql dev連線oracle相關問題SQLdevOracle
- 關於 Homestead 連線 MySQL 問題MySql
- T-SQL——關於時間段類報表SQL
- 關於sql語句的遊標共享問題SQL
- 請教關於連線池導至系統出錯的問題
- 關於 SAP ABAP 報表的多語言顯示問題試讀版
- Oracle關於week的計算問題Oracle
- sql統計-關於學生成績SQL
- 關於修改分割槽表的問題總結
- MySQL連續範圍問題MySql
- 一些關於日期的計算
- 關於session.auto_start報警的問題Session
- 關於網站專案報價的問題網站
- 關於JPetstore連線資料庫問題資料庫
- 請教關於資料庫連線的問題資料庫
- [SQL]關於Concatenated Groupings的問題[轉載]SQL
- 關於SQL Server的記憶體佔用問題SQLServer記憶體
- 關於系統效能的一個問題
- 求助:關於系統超時的問題
- java中有關日期的顯示問題 (轉)Java
- SQL Server 統計報表(不斷收藏中)SQLServer
- JavaScript 演算法:計算最大連續日期區間JavaScript演算法