数据库查询结果问题

qz362100 2015-01-16 09:03:35
有一个表,字段分别是 ID,name,sex,mark,createTime

ID NAME SEX mark CreateTime
1 小王 男 其它 14:00
2 小王 男 测试 14:20
3 小王 男 来 13:00
4 小华 男 来 13:10
5 小华 男 来 13:20
6 小李 男 来 13:00

用 sql 语句出来,name 不要重复。条件是最新的时间那条列出来、结果如下:
ID NAME SEX mark CreateTime
2 小王 男 测试 14:20
5 小华 男 来 13:20
6 小李 男 来 13:00


...全文
541 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
唐诗三百首 2015-02-16
  • 打赏
  • 举报
回复

create table qz
(ID int,NAME varchar(10),SEX varchar(5),mark varchar(10),CreateTime varchar(10))

insert into qz
 select 1,'小王','男','其它','14:00' union all
 select 2,'小王','男','测试','14:20' union all
 select 3,'小王','男','来','13:00' union all
 select 4,'小华','男','来','13:10' union all
 select 5,'小华','男','来','13:20' union all
 select 6,'小李','男','来','13:00'
 

-- 方法1
select * 
 from qz a 
 where not exists(select 1 
                  from qz b 
                  where b.NAME=a.NAME and b.CreateTime>a.CreateTime)

/*
ID          NAME       SEX   mark       CreateTime
----------- ---------- ----- ---------- ----------
2           小王         男     测试         14:20
5           小华         男     来          13:20
6           小李         男     来          13:00

(3 row(s) affected)
*/


-- 方法2
select a.* 
 from qz a
 inner join(select NAME,
                   max(CreateTime) 'maxCreateTime'
            from qz 
            group by NAME) b 
 on a.NAME=b.NAME and a.CreateTime=b.maxCreateTime

/*
ID          NAME       SEX   mark       CreateTime
----------- ---------- ----- ---------- ----------
2           小王         男     测试         14:20
6           小李         男     来          13:00
5           小华         男     来          13:20

(3 row(s) affected)
*/
zebro1573 2015-01-30
  • 打赏
  • 举报
回复
select a.* from tablename a inner join ( select name, MAX(CreateTime) as [CreateTime] from tablename group by NAME ) b on a.NAME=b.NAME and a.CreateTime=b.CreateTime order by a.CreateTime desc
zebro1573 2015-01-30
  • 打赏
  • 举报
回复
select * from #a a where NAME not in(select NAME from #a where name=a.name and createtime>a.createtime)
doloopcn 2015-01-25
  • 打赏
  • 举报
回复
有一个表,字段分别是 ID,name,sex,mark,createTime ID NAME SEX mark CreateTime 1 小王 男 其它 14:00 2 小王 男 测试 14:20 3 小王 男 来 13:00 4 小华 男 来 13:10 5 小华 男 来 13:20 6 小李 男 来 13:00 select a.ID , a.NAME ,a.SEX ,a.mark ,al.CreateTime From tablename as a,(select NAME ,Max(CreateTime) AS CreateTime from tablename group by NAME) as b where (a.NAME=b.NAME) and (a.CreateTime=b.CreateTime) order by 1
rings2000 2015-01-24
  • 打赏
  • 举报
回复
select * from tb a where not exists(select 1 from tb where name=a.name and createtime>a.createtime) 不同版本的MS SQL可能有不同.
alongkuku 2015-01-23
  • 打赏
  • 举报
回复
with a(id,name,sex,mark,createtime) as
(select 1,'小王','男','其它','14:00' union all
 select 2,'小王','男','测试','14:20' union all
 select 3,'小王','男','来','13:00' union all
 select 4,'小华','男','来','13:10' union all
 select 5,'小华','男','来','13:20' union all
 select 6,'小李','男','来','13:00')
  SELECT a.id,a.name,a.sex,a.mark,a.createtime FROM a JOIN 
 (SELECT name,MAX(createtime)createtime FROM a
 GROUP BY name) AS T ON a.name=T.name AND  a.createtime=T.createtime
 ORDER BY a.id 
江南小鱼 2015-01-18
  • 打赏
  • 举报
回复
select t1.*
from table t1,(select Name,Max(CreateTime) CreateTime from table group by Name) t2 where t1.Name=t2.Name and t1.CreateTime=t2.CreateTime
-晴天 2015-01-17
  • 打赏
  • 举报
回复
select * from tb a where not exists(select 1 from tb where name=a.name and createtime>a.createtime)
Ekun_sky 2015-01-16
  • 打赏
  • 举报
回复
with a(id,name,sex,mark,createtime) as
(select 1,'小王','男','其它','14:00' union all
 select 2,'小王','男','测试','14:20' union all
 select 3,'小王','男','来','13:00' union all
 select 4,'小华','男','来','13:10' union all
 select 5,'小华','男','来','13:20' union all
 select 6,'小李','男','来','13:00')
 select id,name,sex,mark,createtime
 from 
 (select *,ROW_NUMBER()over(partition by name order by createtime desc ) as tid from a) as b
 where b.tid=1 order by id

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧