2012-04-27 60 views
0

我有一個包含三個字段的ID,一個日期(字符串)和一個INT。喜歡這個。需要從兩個字段中選擇,第一個是基於最高的第二個

+--------------------------- 
+BH|2012-09-01|56789 
+BH|2011-09-01|56765 
+BH|2010-08-01|67866 
+CH|2012-09-01|58789 
+CH|2011-09-01|56795 
+CH|2010-08-01|67866 
+DH|2012-09-01|52789 
+DH|2011-09-01|56665 
+DH|2010-08-01|67866 

我需要基本上爲每個ID,我只需要返回具有最高日期字符串的行。從這個例子中,我的結果將需要。

+--------------------------- 
+BH|2012-09-01|56789 
+CH|2012-09-01|58789 
+DH|2012-09-01|52789 
+0

_Why_的日期作爲字符串存儲?這是一個**可怕的想法(儘管至少它們在這裏是一種可排序的形式)。你到目前爲止嘗試過什麼?如果有重複的日期呢? – 2012-04-27 21:10:52

回答

0
SELECT id, date, int 
FROM ( SELECT id, date, int 
     FROM table_name 
     ORDER BY date DESC) AS h 
GROUP BY id 

替換表名和列,以正確的。

+0

我重讀這篇文章,並準備做同樣的事情,大聲笑... GMTA – GDP 2012-04-27 21:09:11

1
SELECT t.id, t.date_column, t.int_column 
    FROM YourTable t 
     INNER JOIN (SELECT id, MAX(date_column) AS MaxDate 
         FROM YourTable 
         GROUP BY id) q 
      ON t.id = q.id 
       AND t.date_column = q.MaxDate 
0

假設如下結構:

CREATE TABLE `stackoverflow`.`table_10357817` (
    `Id` int(11) NOT NULL AUTO_INCREMENT, 
    `Date` datetime NOT NULL, 
    `Number` int(11) NOT NULL, 
    `Code` char(2) NOT NULL, 
    PRIMARY KEY (`Id`) USING BTREE 
) ENGINE=MyISAM AUTO_INCREMENT=11 DEFAULT CHARSET=latin1 

下面的查詢將揮舞預期的結果:

SELECT Code, Date, Number 
FROM table_10357817 
GROUP BY Code 
HAVING Date = MAX(Date) 

本集團勢力每一個單一的代碼的結果(你把它叫做ID)並且HAVING子句僅返回與每個代碼/ ID的最大日期相匹配的數據。

更新

用下面的數據腳本:

INSERT INTO table_10357817 
    (Code, Date, Number) 
VALUES 
    ('BH', '2012-09-01', 56789), 
    ('BH', '2011-09-01', 56765), 
    ('BH', '2010-08-01', 67866), 
    ('CH', '2012-09-01', 58789), 
    ('CH', '2011-09-01', 56795), 
    ('CH', '2010-08-01', 67866), 
    ('DH', '2012-09-01', 52789), 
    ('DH', '2011-09-01', 56665), 
    ('DH', '2010-08-01', 67866) 
相關問題