查询每个class中recordTime最新的一条记录
也就是name为b,d,e的记录
附上建表语句,插入数据的语句。
CREATE TABLE `a1` (  `id` int(11) NOT NULL auto_increment,  `class` varchar(11) default NULL,  `name` varchar(11) default NULL,  `recordTime` datetime default NULL,  PRIMARY KEY  (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=REDUNDANT;INSERT INTO `a1` VALUES (1111,'1','a','1999-12-30 10:00:00');INSERT INTO `a1` VALUES (2222,'1','b','1999-12-30 11:00:00');INSERT INTO `a1` VALUES (3333,'2','c','2000-12-30 10:00:00');INSERT INTO `a1` VALUES (4444,'2','d','2000-12-30 12:00:00');INSERT INTO `a1` VALUES (5555,'3','e',NULL);INSERT INTO `a1` VALUES (6666,'2','f',NULL);

解决方案 »

  1.   

    SELECT * FROM a1 a WHERE NOT EXISTS(SELECT 1 FROM a1
    WHERE a.`class`=`class` AND COALESCE(a.`recordTime`,0)<COALESCE(`recordTime`,0));
      

  2.   

    class为1的记录有a、b,其中b的recordTime是最新的,class为2的记录中有c、d、f,d的recordTime最新,class为3的记录有e,它的recordTime是null,那就把它当最新的了。
    所以不是b、d、e吗?
      

  3.   

    select * from a1 where (class,ifnull(recordTime,0)) in (select class,ifnull(max(recordTime),0) from a1 group by class);