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

如何從資料表中取得各項目的最大值?

答題得分者是:christie
chenyk
高階會員


發表:14
回覆:95
積分:171
註冊:2002-07-08

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-10-05 12:09:14 IP:202.39.xxx.xxx 訂閱
我有一個資料表 table_A 如下
-------------------------------------------------
it_no | it_values | it_note
-------------------------------------------------
1 | 100 | TEXT1
1 | 101 | TEXT2
2 | 100 | TEXT3
2 | 101 | TEXT4
2 | 102 | TEXT5
3 | 100 | TEXT6
3 | 101 | TEXT7

我希望能取得每個 it_no 中 it_values 為最大值的那一筆資料,如下所示:
-------------------------------------------------
it_no | it_values | it_note
-------------------------------------------------
1 | 101 | TEXT2
2 | 102 | TEXT5
3 | 101 | TEXT7

我試過用迴圈來作,但當 it_no資料一多,查詢速度就會變得很慢,我也試過
先建立一個TEMP table取出各 it_no 中 it_values的最大值,再做一次合併查詢
取得該筆完整資料。速度尚可。
由於每日資料約有7~8000筆
請問各位前輩,不知道有沒有用一個SQL 命令來達到查詢的目的。來提高查詢的效率

望不吝賜教
shunchia63
高階會員


發表:26
回覆:141
積分:198
註冊:2007-05-22

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-10-06 17:46:51 IP:61.64.xxx.xxx 訂閱
Select it_NO,max(it_values) from xx group by it_NO
christie
資深會員


發表:30
回覆:299
積分:475
註冊:2005-03-25

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-10-06 17:54:10 IP:203.73.xxx.xxx 訂閱
select * from tmpXX where it_no||it_values in( select max(it_no||it_values) from tmpXX group by it_no)
------
What do we live for if not to make life less difficult for each other?
編輯記錄
christie 重新編輯於 2007-10-06 17:55:22, 註解 無‧
chenyk
高階會員


發表:14
回覆:95
積分:171
註冊:2002-07-08

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-10-08 09:28:48 IP:202.39.xxx.xxx 訂閱
先謝謝大大撥冗答覆
shunchia63大的SQL 能取出最大值,可惜得不到後面的it_note
christie大的SQL,我試了一下它會直接列出全部的資料,都沒有過濾耶..
我的同事把sql改成
select * from tmpXX where (it_no,it_values) in( select it_no,max(it_values) from tmpXX group by it_no)
在oracle是可以正常運作的,而我的mysql是4.0的,執行上面的sql會當掉,是版本造成的問題嗎?
christie
資深會員


發表:30
回覆:299
積分:475
註冊:2005-03-25

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-10-09 08:41:47 IP:203.73.xxx.xxx 訂閱
SELECT * FROM TMPXX WHERE CONCAT(IT_NO,IT_VALUES) IN(
SELECT MAX(CONCAT(IT_NO,IT_VALUES)) FROM TMPXX GROUP BY IT_NO)
------
What do we live for if not to make life less difficult for each other?
LYW
一般會員


發表:9
回覆:32
積分:8
註冊:2002-03-08

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-10-09 16:03:56 IP:125.228.xxx.xxx 未訂閱
mysql 4.0 不支援次查詢
===================引 用 chenyk 文 章===================
先謝謝大大撥冗答覆
shunchia63大的SQL 能取出最大值,可惜得不到後面的it_note
christie大的SQL,我試了一下它會直接列出全部的資料,都沒有過濾耶..
我的同事把sql改成
select * from tmpXX where (it_no,it_values) in( select it_no,max(it_values) from tmpXX group by it_no)
在oracle是可以正常運作的,而我的mysql是4.0的,執行上面的sql會當掉,是版本造成的問題嗎?
christie
資深會員


發表:30
回覆:299
積分:475
註冊:2005-03-25

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-10-09 16:14:33 IP:203.73.xxx.xxx 訂閱
Sorry, 我使用 MySQL5.0,
SELECT * FROM TMPXX WHERE CONCAT(IT_NO,IT_VALUES) IN(
SELECT MAX(CONCAT(IT_NO,IT_VALUES)) FROM TMPXX GROUP BY IT_NO)
這在 5.0是 OK.
------
What do we live for if not to make life less difficult for each other?
編輯記錄
christie 重新編輯於 2007-10-09 16:15:50, 註解 無‧
christie 重新編輯於 2007-10-09 23:18:23, 註解 無‧
chenyk
高階會員


發表:14
回覆:95
積分:171
註冊:2002-07-08

發送簡訊給我
#8 引用回覆 回覆 發表時間:2007-10-11 21:20:19 IP:125.231.xxx.xxx 訂閱
christie 大的sql 在 mysql 4.1.9 也可以用,我試過,結果是對的
在 v4.1.9的版本中,500筆資料就需要近 30秒的時間才能撈出結
果,不知道是不是沒有建立索引的關係,但這還是比我原來的方法要快一點。

再次感謝 christie 的解答
系統時間:2024-03-29 16:02:55
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!