討論區快速選單
知識庫快速選單
討論區最近新進100則主題 傑米的攝影旅遊筆記 網路投保旅行平安險
[ 回上頁 ] [ 討論區發言規則 ]
請問一個 SQL 語法該如何下呢 ...(困擾許久)
更改我的閱讀文章字型大小
作者 : symei(symei)
[ 貼文 5 | 人氣 861 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2003/2/13 下午 01:44:44


請教各位要如何下這個SQL語法
我有一個資料表如下所顯示
內容包含所有單據的明細
現今要過濾出來所有銷貨單的成本
其成本為該銷貨單銷貨日期前的最後進貨單價格
範例約如下表所示
請各位幫幫忙




原始資料表內容

單別 日期 品號 價格     
進 90/12/28 A001 3.5
進 90/12/31 A004 2
銷 91/1/1 A001 5
進 91/1/2 A001 3
退 91/1/3 A002 5
進 91/1/5 A001 3
銷 91/1/10 A002 6
銷 91/1/6 A001 4
進 91/1/3 A002 4
進 91/1/11 A003 3
銷 91/1/22 A001 7
銷 91/1/18 A004 6


欲產生結果


單別 日期 品號 成本
91/1/1 A001 3.5
91/1/6 A001 3
91/1/10 A002 5
91/1/18 A004 2
91/1/22 A001 3
作者 : gwuu(Gordon) 貼文超過500則
[ 貼文 668 | 人氣 7592 | 評價 770 | 評價/貼文 1.15 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2003/2/13 下午 02:00:06
select
日期, 品號 ,成本
From TableA A
Where 日期 = (Select max(日期) from TableA B where A.品號 = B.品號)
作者 : symei(symei)
[ 貼文 5 | 人氣 861 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2003/2/14 上午 11:30:16

>select
>日期, 品號 ,成本
>From TableA A
>Where 日期 = (Select max(日期) from TableA B where A.品號 = B.品號)
>

對不起我看不太懂
我原來的資料表名稱為  BillDail
欄位為   單別,日期,品號,單價,數量

若依您所提供之語法則應為
select 
日期,品號,單價
From BillDail
where 日期 = (Select Max(日期) From ##1## Where Billdail.品號 = ##2##)

不解的是 ##1## 和 ##2## 該各填入什麼
另外還有一個問題
每一個銷貨找到的成本應為其銷貨日期的最近進貨單相同品號之單價

麻煩您再多費心了


作者 : gwuu(Gordon) 貼文超過500則
[ 貼文 668 | 人氣 7592 | 評價 770 | 評價/貼文 1.15 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2003/2/14 下午 12:00:44
select 
日期,品號,單價
From BillDail A
where 日期 = (Select Max(日期) From BillDail B Where A.品號 = B.品號 )

每一個銷貨找到的成本應為其銷貨日期的最近進貨單相同品號之單價
看不太懂耶,可不可以舉例說明,最好附資料



作者 : symei(symei)
[ 貼文 5 | 人氣 861 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2003/2/14 下午 01:16:28
資料就如同我提問的內容


91/1/6銷貨單 品號A001
其進貨成本為
91/1/5 進貨單 品號A001 的3元
作者 : gwuu(Gordon) 貼文超過500則
[ 貼文 668 | 人氣 7592 | 評價 770 | 評價/貼文 1.15 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2003/2/14 下午 02:59:23
select Date,ID,
(Select price from billdail B where A.ID = B.ID and B.type ='I'
and B.Date = (Select max(Date) from billdail C where B.ID = C.ID and A.ID = C.ID and A.Date > C.Date)
)
from billdail A
where A.Type = 'O'

Sorry 一開始誤會你的意思, 以上好像還有一點問題,你稍為改一下一該就可以了(我今天沒有時間試了,如果再不行改天在幫你try)
I = 進
O = 銷
作者 : gwuu(Gordon) 貼文超過500則
[ 貼文 668 | 人氣 7592 | 評價 770 | 評價/貼文 1.15 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2003/2/14 下午 05:05:34
select Date,ID,
(Select max(price) from billdail B where A.ID = B.ID and B.type <> 'O'
and B.Date = (Select max(Date) from billdail C where B.ID = C.ID and C.Type <> 'O' and A.Date > C.Date)
)
from billdail A
where A.Type = 'O'
order by date

O -->銷
作者 : symei(symei)
[ 貼文 5 | 人氣 861 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2003/2/15 下午 01:31:49
感謝您的回答
我試過了沒有問題
但是
查詢的時間好久耶
我的資料表約有40000筆資料
計算一次約要花掉 5:34
不知是否有比較快的方式呢
作者 : gwuu(Gordon) 貼文超過500則
[ 貼文 668 | 人氣 7592 | 評價 770 | 評價/貼文 1.15 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2003/2/17 上午 09:01:27
select  Date,ID,
(Select  max(price)  from  billdail  B  where  A.ID  =  B.ID  and  B.type  <>  'O'
and  B.Date  =  (Select  max(Date)  from  billdail  C  where  B.ID  =  C.ID  and  C.Type  <>  'O'  and  A.Date  >  C.Date)
)
from  billdail  A
where  A.Type  =  'O'
order  by  date

把過濾的條件放前面  改成

select  Date,ID,
(Select  max(price)  from  billdail  B  where  B.type  <>  'O'  and  A.ID  =  B.ID 
and  B.Date  =  (Select  max(Date)  from  billdail  C  where  C.Type  <>  'O'    and  B.ID  =  C.ID  and  A.Date  >  C.Date)
)
from  billdail  A
where  A.Type  =  'O'
order  by  date

再增加index  key(ID)  試試看
作者 : symei(symei)
[ 貼文 5 | 人氣 861 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2003/2/19 下午 08:00:10
感謝您的回覆
我試了以後有比較快一點
5:13 
請問是否還有其它方式可以提供嗎
作者 : gwuu(Gordon) 貼文超過500則
[ 貼文 668 | 人氣 7592 | 評價 770 | 評價/貼文 1.15 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2003/2/20 下午 02:26:04
你有增加index  key嗎?

因為我沒有這麼大量的資料沒有辦法幫你試

你可以把sub  query的部份用view  替代試試看(我覺得好像沒有什麼用...)

另外你的機器配備是怎樣的

我曾經有在我的notebook(PIII  600  +  256  Ram)上要跑好幾分鐘 

放到server(PIII  933  *  4  +  4GB  RAM)上只要一秒鐘就好的
作者 : cryolite(cryolite)
[ 貼文 11 | 人氣 37 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2003/4/4 上午 01:29:55
不好意思
插個話

這段好像沒考慮到上面的資料堙A有「退」
成本,應該是算「進」
 板主 : 徵求中
 > SQL Server 7/2000 - 討論區
 - 最近熱門問答精華集
 - 全部歷史問答精華集
 - SQL Server 7/2000 - 知識庫
  ■ 全站最新Post列表
  ■ 我的文章收藏
  ■ 我最愛的作者
  ■ 全站文章收藏排行榜
  ■ 全站最愛作者排行榜
  ■  月熱門主題
  ■  季熱門主題
  ■  熱門主題Top 20
  ■  本區Post排行榜
  ■  本區評價排行榜
  ■  全站專家名人榜
  ■  全站Post排行榜
  ■  全站評價排行榜
  ■  全站人氣排行榜
 請輸入關鍵字 
  開始搜尋
 
Top 10
評價排行
SQL Server 7/2000
1 小朱 1540 
2 小台 1520 
3 Gordon 600 
4 ㄉ一ˊㄎㄜˋ 580 
5 路人 490 
6 max 470 
7 william 410 
8 Aries 250 
9 阿利 180 
10 羅啟章 160 
SQL Server 7/2000
  專家等級 評價  
  一代宗師 10000  
  曠世奇才 5000  
  頂尖高手 3000  
  卓越專家 1500  
  優秀好手 750  
Microsoft Internet Explorer 6.0. Screen 1024x768 pixel. High Color (16 bit).
2000-2019 程式設計俱樂部 http://www.programmer-club.com.tw/
0.0625