2013-04-12 36 views
0

我有一個表像這樣MySQL的獨特聲明

ID  | date | CODE 

1  01-02-13  VDOT 
2  03-02-13  CMAX 
3  05-02-13  VDOT 
1  05-02-13  CMAX 
1  09-02-13  VDOT 

我的SQL查詢如下

SELECT * FROM Table_Name ; 

這顯然是顯示所有的結果,但我只需要顯示每個代碼的一個實例日期是最近所以我的結果需要看起來像這樣

1  09-02-13  VDOT 
1  05-02-13  CMAX 

任何人都可以告訴我如何獲得o每個代碼的結果(按日期最近輸入)?

回答

1

試試這個:

SELECT * FROM Table_Name 
GROUP BY CODE 
ORDER BY date DESC 

這將是集團後訂購。因此在分組結果中給出了ORDERS。

但是現在試試這個:

SELECT * FROM 
(SELECT * FROM Table_Name ORDER BY date DESC) tx2 
GROUP BY CODE 

這將確保集團之前正確的日期順序。

+0

請注意,這隻會在MySQL工作,但將是無效的SQL中的所有其他DBMS或如果MySQL已經配置了「strict_group_by」 –

+1

完美的這麼簡單!謝謝milliom –

+0

這很簡單,但這不會給你總是正確的值,請看這裏[MySQL擴展到GROUP BY](http://dev.mysql.com/doc/refman/5.6/en/group-by-extensions .html) –

2
SELECT a.* 
FROM TableName a 
     INNER JOIN 
     (
      SELECT CODE, MAX(date) max_date 
      FROM TableName 
      GROUP BY CODE 
     ) b ON a.Code = b.Code AND 
       a.date = b.max_date 
0
SELECT * FROM 
TABLE AS A 
JOIN 
(
SELECT D.CODE, MAX(D.DATE) AS DATE FROM TABLE AS D 
GROUP BY D.CODE 
) AS E 
WHERE 
A.CODE = E.CODE 
AND A.DATE = E.DATE