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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 大資料開發-Hive-常用日期函式&&日期連續題sql套路大資料Hive函式SQL
- 統計報表 -- sql統計語句SQL
- 關於 Homestead 連線 MySQL 問題MySql
- [20200711]關於左右連線的問題.txt
- 如何解決報表關聯計算中的效能問題
- sql統計-關於學生成績SQL
- T-SQL——關於時間段類報表SQL
- 關於canonmx538無線連線的問題
- 關於IDEA使用xml實現動態sql的問題IdeaXMLSQL
- 關於 SAP ABAP 報表的多語言顯示問題試讀版
- MySQL關於根據日期查詢資料的sql語句MySql
- sql server對於日期的處理SQLServer
- 關於this指向的問題
- 10個SQL技巧之四:找到連續的沒有間隙的最大系列的日期SQL
- 基於mysql資料庫 關於sql優化的一些問題MySql資料庫優化
- 關於動態表單遇到的一些問題
- 關於中文日期
- 微課sql最佳化(15)、表的連線方法(4)-關於Hash Join(雜湊連線)SQL
- 微課sql最佳化(16)、表的連線方法(5)-關於Merge Join(排序合連線)SQL排序
- 表的連線是指在一個SQL語句中通過表與表之間的關連SQL
- 關於DrawerLayout的小問題
- 關於javascript的this指向問題JavaScript
- 關於 Puerts 的效能問題
- 關於盒模型相關的問題模型
- 關於在執行java連線MongoDB時遇到的連線超時問題JavaMongoDB
- 關於使用 Laravel new 新專案 報錯的問題Laravel
- 關於mes系統硬體配置問題
- 「小碼短連結」好用、好看、有統計報表的短連結工具
- SQL連續查詢問題擴充—記上海拼多多非技術崗面試真題SQL面試
- 關於google搜尋欄首字母粘連問題Go
- 關於如何系統提升自己專業能力的問題?
- [併發程式設計]-關於 CAS 的幾個問題程式設計
- 關於echarts圖表在tab頁中width:100%失效的問題Echarts
- 關於Xcode10中libstdc報錯問題的解決XCode
- 關於使用toFixed()函式時報錯”toFixed() is not a function”的問題函式Function
- 關於ida f5時報錯lumina無法連線到雲伺服器的問題伺服器
- Windows10系統關閉問題報告的方法Windows
- 關於 Laravel 分頁的問題?Laravel
- [20191129]關於hugepages的問題.txt