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
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
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
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 行受影响)
order by name desc,age