推 george755185:抱歉忘了加上訊息... 我用的是MySQL 09/13 02:44
※ 引述《george755185 (覺悟者恆幸福)》之銘言:
: 這是一個假設的欄位: (設名稱是test)
: GroupNo | x | y | Date
: ---------------------------
: 今天我想依GroupNo分類,將各類下Date最大的x,y資料取出
: 我用的語法是:
: SELECT GroupNo, x, y, Date
: FROM test
: WHERE (
: GroupNo, Date
: )
: IN (
: SELECT GroupNo, MAX( Date )
: FROM test
: GROUP BY GroupNo
: )
: 可以達到我要的效果
: 但是在資料量大(2000筆以上)的時候,速度太慢無法符合需求 ~"~
: 有什麼方法可以改善這個查詢的效率嗎?
: 或是在使用 MAX...GROUP BY ....的時候,能不能將這個MAX列的其他欄位一併取出來?
如果你是用 Oracle,可以試試看下列的 SQL 會不會好一點
SELECT *
FROM (SELECT GROUPNO, X, Y,
ADATE,
MAX(ADATE) OVER (PARTITION BY GROUPNO) AS MAX_ADATE
FROM TEST ) A
WHERE ADATE = MAX_ADATE
不過你說資料筆數大於 2000 筆就會速度太慢這件事讓我覺得你用的應該不會是 Oracle
也許你該考慮ㄧ下加個 index ( GROUPNO, DATE ), 這樣也許會有幫助
p.s 版規不是寫了說要說明是哪家的資料庫嗎?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.160.106.148