现在表A里有字段id,name,loginTime
select * from A后结果如下
1 小明 2011-3-7 
2 小明 2011-3-8 
3 小明 2011-3-9
4 小黄 2011-3-8 
5 小黄 2011-3-9但我想要的结果是
3 小明 2011-3-9
5 小黄 2011-3-9请问该语句该怎么写?

解决方案 »

  1.   

    select id,name,max(loginTime)
    from a group by id,name;
      

  2.   

    select * from tt a where not exists(select 1 from tt where a.name=name and a.loginTime<loginTime)
      

  3.   

    参考下贴中的多种方法http://topic.csdn.net/u/20091231/16/2f268740-391e-40f2-a15e-f243b2c925ab.html
    [征集]分组取最大N条记录方法征集,及散分....
      

  4.   

    以楼主提供的测试数据,最简单的方法如下 
    select * from A where loginTime='2011-3-9'
      

  5.   

    假设以ID为标准:
    select * from tt a where not exists(select 1 from tt where a.name=name and a.id<id)
      

  6.   

    or
    select a.* from tt a inner join
    (select name,max(loginTime) as ma from tt group by name) b
    on a.name=b.name and a.loginTime=b.ma
      

  7.   

    不好意思漏了字段了
    现在表A里有字段id,name,loginTime,act
    select * from A后结果如下
    1 小明 2011-3-7 A
    2 小明 2011-3-8 C
    3 小明 2011-3-9 A
    4 小黄 2011-3-8 A
    5 小黄 2011-3-9 C但我想要的结果是
    3 小明 2011-3-9 A
    5 小黄 2011-3-9 C请问该语句该怎么写?ACT代表一个动作这里用AC字母表示
      

  8.   

    2、5、6代码均可
    2、6代码取loginTime最大
    5代码取ID最大测试一下吧
      

  9.   

    drop table if exists dms.A;
    create table dms.A
    select 1 id, '小明' name, '2011-3-7' d, 'A' f union all
    select 2 ,'小明','2011-3-8','C' union all
    select 3 ,'小明','2011-3-9','A' union all
    select 4,'小黄','2011-3-8','A' union all
    select 5,'小黄','2011-3-9','C';select a2.*
    from(
        select a.name, max(a.d) md from dms.A a group by a.name
    )a1, dms.A a2
    where a1.name=a2.name
    and a1.md=a2.d;-- 结果如下:
    '3', '小明', '2011-3-9', 'A'
    '5', '小黄', '2011-3-9', 'C'
      

  10.   


    drop table if exists dms.A;
    create table dms.A
    select 1 id, '小明' name, '2011-3-7' loginTime, 'A' act union all
    select 2 ,'小明','2011-3-8','C' union all
    select 3 ,'小明','2011-3-9','A' union all
    select 4,'小黄','2011-3-8','A' union all
    select 5,'小黄','2011-3-9','C';select a2.*
    from(
        select a.name, max(a.loginTime) md from dms.A a group by a.name
    )a1, dms.A a2
    where a1.name=a2.name
    and a1.md=a2.loginTime;-- 结果如下:
    '3', '小明', '2011-3-9', 'A'
    '5', '小黄', '2011-3-9', 'C'
      

  11.   

    mysql> SHOW CREATE TABLE QA\G;
    *************************** 1. row ***************************
           Table: QA
    Create Table: CREATE TABLE `qa` (
      `id` bigint(20) NOT NULL DEFAULT '0',
      `name` varchar(2) NOT NULL DEFAULT '',
      `loginTime` varchar(8) NOT NULL DEFAULT '',
      `act` varchar(1) NOT NULL DEFAULT ''
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8
    1 row in set (0.00 sec)mysql> SELECT * FROM QA;
    +----+--------+-----------+-----+
    | id | name   | loginTime | act |
    +----+--------+-----------+-----+
    |  1 | 灏忔槑   | 2011-3-7  | A   |
    |  2 | 灏忔槑   | 2011-3-8  | C   |
    |  3 | 灏忔槑   | 2011-3-9  | A   |
    |  4 | 灏忛粍   | 2011-3-8  | A   |
    |  5 | 灏忛粍   | 2011-3-9  | C   |
    +----+--------+-----------+-----+
    5 rows in set (0.00 sec)
    mysql> SET NAMES GBK;
    Query OK, 0 rows affected (0.00 sec)mysql> SELECT * FROM qa a WHERE NOT EXISTS(SELECT 1 FROM qa WHERE a.NAME=NAME AN
    D a.loginTime<loginTime);
    +----+------+-----------+-----+
    | id | name | loginTime | act |
    +----+------+-----------+-----+
    |  3 | 小明    | 2011-3-9  | A   |
    |  5 | 小黄    | 2011-3-9  | C   |
    +----+------+-----------+-----+
    2 rows in set (0.02 sec)