【IT168 MSSQL文档】求代码来查询每一个人的最后一条记录的.
姓名 顺号 金额
张三 1 2232
张三 2 4573
张三 3 3432
张三 4 1326
张三 5 5472
李四 1 556
李四 2 950
李四 3 886
就是想找出"张三 5 5472和李四 3 886 "这样的记录来.
另外,若然这里的顺号变为是日期类型的又如何查询.
--------------------------------------------------------------------------------
作者:flywolf2000 时间:04-09-22 10:43
select 姓名,max(顺号) as 最大顺号 from tablename group by 姓名
如果是日期用convert函数转换。
--------------------------------------------------------------------------------
作者:lynx286 时间:04-09-22 13:13
select * from 表 a where 顺号=(select max(顺号) from 表 where 姓名=a.姓名)
--------------------------------------------------------------------------------
作者:magicangel 时间:04-09-22 15:51
--建立测试数据表
select 1 id,'006' name,6 flag_id
into flag
union all
select 2,'002',6
union all
select 5,'006',6
union all
select 2,'003',6
union all
select 3,'003',6
union all
select 1 ,'002',6
union all
select 1 ,'002',6
--答案一
select distinct a.*
from flag a where exists(select * from flag where id=a.id having max(name)=a.name)
--答案二
select distinct a.* from flag a, (select id,max(name) name from flag group by id) b
where a.id=b.id and a.name=b.name
--答案三
select * from flag a where name=(select max(name) from flag where id=a.id)
--第三个答案的效率比较高
--建聚集索引的话可以优化上面的三个答案
create clustered index ix_flag on flag(id)