EMPTable
id name age gender createdate 
1  张三 15 男 2011-12-5
2  张三 16 男 2011-12-6
3  张三 15 男 2011-12-9
4  李四 14 女 2011-12-3
5  李四 14 女 2011-12-15
查询 某人 最后一次创建的时间.(条件是姓名和年龄,出来的结果以id排序)现在出来id很乱.我直接在
select * from tb t whrre createtime=(select max(createtime) from tb where name=t.name amd age=t.age)后面加order by id 查不来也不对的.
我想知道数据库循环怎么会把id打乱了.什么原理.正确显示:
id name age gender createdate
3  张三 15   男    2011-12-9
2  张三 16   男    2011-12-6
5  李四 14   女    2011-12-5
之前感谢
ssp2009 
fredrickhu 

解决方案 »

  1.   


    select a.* 
    from EMPTable a
    inner join
    (select name,age,max(createdate) mcreatedate
    from EMPTable
    group by name,age) b
    on a.name=b.name and a.age=b.age and a.createdate=b.mcreatedate
    order by a.id
      

  2.   


    IF NOT OBJECT_ID('tb') IS NULL 
        DROP TABLE tb
    create table tb (id int, [name] varchar(50),age int ,gender varchar(50),createdate datetime)
    insert into tb select '1','张三', 15 ,'男' ,'2011-12-5'
    insert into tb select '2','张三', 16 ,'男' ,'2011-12-6'
    insert into tb select '3', '张三', 15 ,'男' ,'2011-12-9'
    insert into tb select '4','李四', 14 ,'女' ,'2011-12-3'
    insert into tb select '5', '李四', 14 ,'女' ,'2011-12-15'
    select * from tb a where  not exists(select 1 from tb b where b.createdate>a.createdate and a.age=b.age)id          name                                               age         gender                                             createdate
    ----------- -------------------------------------------------- ----------- -------------------------------------------------- -----------------------
    2           张三                                                 16          男                                                  2011-12-06 00:00:00.000
    3           张三                                                 15          男                                                  2011-12-09 00:00:00.000
    5           李四                                                 14          女                                                  2011-12-15 00:00:00.000(3 行受影响)
      

  3.   

    select * from tb a where  not exists(select 1 from tb b where b.createdate>a.createdate and a.age=b.age )
    order by name desc,age
      

  4.   

    select t.* from EMPTable t where createdate = (select max(createdate) from EMPTable where name = t.name) order by t.idselect t.* from EMPTable t where not exists (select 1 from EMPTable where name = t.name and createdate > t.createdate) order by t.id