• 4

請教SQL 語法問題

請教各位先進,我有一問題如下

我有一資料表如下:

客戶名稱進貨品名進貨日期進貨數量進貨單價
小明書局Windows XP 使用手冊2008011010250
大雄書局Office 2007 使用手冊200801255210
大雄書局Office 2007 使用手冊200805106205
小明書局Windows XP 使用手冊200805208245


請問該如何下sql指令,才能篩選出最近一筆進貨之資料(所需結果如下):
客戶名稱進貨品名進貨日期進貨數量進貨單價
小明書局Windows XP 使用手冊200805208245
大雄書局Office 2007 使用手冊200805106205


感謝大家
--------------------
依照我目前的狀況
同一天進貨的產品是不會有第二筆的情形出現的..
----------------------------------------------------
為了讓各位高手先進更了解我的目的與需求
我更正我上述的限制條件:

同一家廠商同一天進貨的品號一定只有一筆,但是可能會有好幾種品號
比如說:A廠商於20080520進貨了品號A與品號B,品號A與品號B於20080520最多只會各出現1筆

進貨數量與單價可以不列入考慮

我最終的目的是要取每一家廠商所進的每一種品號,其最後進貨日期為何?
希望輸出結果如下


廠商名稱進貨品號進貨日期
廠商A品號A取最近的日期
廠商A品號B取最近的日期
廠商B品號A取最近的日期
廠商B品號B取最近的日期


希望各位先進可以看的清楚我的需求為何?
-----------------------------------------------------------------
感謝眾人的集思廣益
更謝謝 30樓 askasyoi 大大的指導建議

沒想到語法就這麼簡單的幾句

SELECT RTRIM(MA003) + '-' + RTRIM(MA001) AS 廠商品號, MAX(MA012) AS 進貨日期
FROM dbo.MOCMA
GROUP BY RTRIM(MA003) + '-' + RTRIM(MA001)

還真的跑出我要的結果

我將askasyoi大大的語法略作修改如下


SELECT TOP 100 PERCENT RTRIM(MA003) + '-' + RTRIM(MA001) AS 廠商品號,
MAX(MA012) AS 進貨日期, COUNT(*) AS 進貨次數
FROM dbo.MOCMA
GROUP BY RTRIM(MA003) + '-' + RTRIM(MA001)
HAVING (COUNT(*) >= 1)
ORDER BY 廠商品號



不過我還有一個需求就是

如果要撈出最後第二筆的進價資料的話

語法應該怎麼下會比較好 ?

(如果某個品號最近進價日期僅有一筆的話,那就撈那一筆,如果有好幾筆的話就要撈最後第二筆)



2008-05-19 16:36 發佈
文章關鍵字 sq SQL 語法問題


是查最新一筆建構的資料嗎?

理論上資料庫的操作不就是各欄位的比對運算?

例如:利用 進貨日期 來查詢

Select * from 資料表名稱

以你的需求可以用 進貨日期 來查詢

Select 進貨日期 from 資料表名稱 order by 欄位 ASC :「ASC」表示以升冪(小至大),由於是日期欄位,因此依先至後排列。

結果:傳回所有紀錄的Money欄位資料,並依AccountCreated由先至後排列。




kkgo2 wrote:
是查最新一筆建構的資...(恕刪)


感謝您的回答
不過....我要的並不是如此喔~

譬如說我舉例的資料表共有4筆資料

我要的結果是秀出每一家客戶最後1筆的進價資料喔(所以應該結果只有2筆而已)



boneyhsu wrote:
感謝您的回答不過.....(恕刪)

無法一個select做完吧
先找出幾個廠商
以廠商作key, select 日期排序

所以要幾個變數來裝一下
試試看 :

select * from table_name where in_date in (select max(in_date) from table_name group by cus_name) order by cus_name

另外
您可以增加一序號欄位(自動增加)









































序號 客戶名稱 進貨品名 進貨日期 進貨數量 進貨單價
1 小明書局 Windows XP 使用手冊 20080110 10 250
2 大雄書局 Office 2007 使用手冊 20080125 5 210
3 大雄書局 Office 2007 使用手冊 20080510 6 205
4 小明書局 Windows XP 使用手冊 20080520 8 245

做累加計數
就可以改成

select * from table_name where pk_no in(select max(PK_NO) from table_name group by cus_name ) order by cus_name

若有錯誤請先進們指教
如果可以多加一個序號欄位的話,直接抓某客戶的紀錄出來,然後用程式語言 (像是 PHP) 去把序號最新 (或是最近幾個) 的資料丟出來就好了。


真是要命,想不到01這裡居然有一堆會sql的隱士高手潛伏......小弟懂一點還是因為學生時代有過作業經驗,出社會沒機會用,也差不多都又還給老師了.....

SQL 某種資料庫語法,當年我還是用VB來操作的...純正的SQL...說真的我也是一頭霧水...><!


sub-query就可以做到了~
人間四月芳非盡,山寺桃花始盛開。常恨春歸無覓處,不知轉入此山來。
changshuho wrote:
試試看 :selec...(恕刪)


感謝 changshuho 大大的回答
我的table裡並沒有使用到序號這個欄位
我的進貨日期型態是使用字元型態

我依照您的語法執行
同一家廠商還是會篩選出1筆以上的資料

是否於子查詢中的 select max(in_date).........中出了問題?

謝謝您~

我另外將我完整的指令碼呈現如下:
SELECT RTRIM(MA003) + '-' + RTRIM(MA001) AS 廠商品號, MA012 AS 進貨日期
FROM dbo.MOCMA
WHERE (MA012 IN
(SELECT MAX(MA012)
FROM dbo.MOCMA
GROUP BY RTRIM(MA003) + '-' + RTRIM(MA001)))
ORDER BY 廠商品號

--------------------------
備註:
MA003:廠商代號
MA001:產品品號
我認錯..
哈哈..
看到盲點了

上面的寫法確實還是會撈出多筆資料..
再給他想想+ing...
  • 4
內文搜尋
X
評分
評分
複製連結
Mobile01提醒您
您目前瀏覽的是行動版網頁
是否切換到電腦版網頁呢?