需要从两个字段中选择,首先根据第二个字段的最高值进行选择

时间:2012-04-27 21:03:49

标签: mysql sql

我有一个包含三个字段的表,一个ID,一个Date(字符串)和一个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,我只需要返回具有最高Date字符串的行。从这个例子来看,我的结果需要。

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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

将table_name和列替换为正确的。

答案 2 :(得分: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)

GROUP BY强制每个代码生成一个结果(你称之为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)