求一sql语句

purexiafeng 2008-10-14 02:53:53
表结构如下:

create table salary
(
empid int,
empname varchar(50),
changtime datetime,
salary money
)

insert into salary values(2,'ela','2007-08-20',100)
insert into salary values(1,'sam','2007-06-20',50)
insert into salary values(2,'ela','2007-05-20',70)
insert into salary values(3,'richer','2007-08-21',300)
insert into salary values(4,'bacom','2007-06-20',400)
insert into salary values(2,'sam','2007-07-20',200)

要求:用一句sql查询出所有员工最新时间的工资

谢谢帮忙!
...全文
103 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
denghz1982 2008-10-14
  • 打赏
  • 举报
回复
create table salary 
(
empid int,
empname varchar(50),
changtime datetime,
salary money
)

insert into salary values(2,'ela','2007-08-20',100)
insert into salary values(1,'sam','2007-06-20',50)
insert into salary values(2,'ela','2007-05-20',70)
insert into salary values(3,'richer','2007-08-21',300)
insert into salary values(4,'bacom','2007-06-20',400)
insert into salary values(2,'sam','2007-07-20',200)

select empid,empname,changtime,salary from
(select empid,empname,changtime,salary,
max(changtime) over (partition by empname) as newtime from salary) a
where a.changtime=a.newtime
denghz1982 2008-10-14
  • 打赏
  • 举报
回复
select empid,empname,changtime,salary from (select empid,empname,changtime,salary,max(changtime) over (partition by empname) as newtime from salary) a where a.changtime=a.newtime
tianyazifan 2008-10-14
  • 打赏
  • 举报
回复
create table salary 
(
empid int,
empname varchar(50),
changtime datetime,
salary money
)

insert into salary values(2,'ela','2007-08-20',100)
insert into salary values(1,'sam','2007-06-20',50)
insert into salary values(2,'ela','2007-05-20',70)
insert into salary values(3,'richer','2007-08-21',300)
insert into salary values(4,'bacom','2007-06-20',400)
insert into salary values(2,'sam','2007-07-20',200)

select * from salary where changtime in
(
select max(changtime) from salary
group by empname
)
drop table salary


结果:
2 ela 2007-08-20 00:00:00.000 100.00
1 sam 2007-06-20 00:00:00.000 50.00
3 richer 2007-08-21 00:00:00.000 300.00
4 bacom 2007-06-20 00:00:00.000 400.00
2 sam 2007-07-20 00:00:00.000 200.00
tianyazifan 2008-10-14
  • 打赏
  • 举报
回复
create table salary 
(
empid int,
empname varchar(50),
changtime datetime,
salary money
)

insert into salary values(2,'ela','2007-08-20',100)
insert into salary values(1,'sam','2007-06-20',50)
insert into salary values(2,'ela','2007-05-20',70)
insert into salary values(3,'richer','2007-08-21',300)
insert into salary values(4,'bacom','2007-06-20',400)
insert into salary values(2,'sam','2007-07-20',200)

select * from salary where changtime in
(
select max(changtime) from salary
group by empname
)
drop table salary


结果:
2 ela 2007-08-20 00:00:00.000 100.00
1 sam 2007-06-20 00:00:00.000 50.00
3 richer 2007-08-21 00:00:00.000 300.00
4 bacom 2007-06-20 00:00:00.000 400.00
2 sam 2007-07-20 00:00:00.000 200.00
时光瞄 2008-10-14
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 hsie168518 的回复:]

两个人用一个empid    ?
[/Quote]
同问..
liujuns 2008-10-14
  • 打赏
  • 举报
回复
select a.*
from salary a
join
(Select empid, MAX(changtime) as maxchangtime from salary group by empid ) b on
a.changtime = b.maxchangtime and a.empid =b.empid
wer123q 2008-10-14
  • 打赏
  • 举报
回复
 select * from salary aa where not exists(select * from salary where changtime>aa.changtime and 
empid = aa.empid )
flyidealism 2008-10-14
  • 打赏
  • 举报
回复

select s.empid,empname,salary
from
salary s inner join
(
select empid,max(changtime) as changtime
from salary
group by empid
) a
on s.changtime=a.changtime and s.empid=a.empid

生活真美好 2008-10-14
  • 打赏
  • 举报
回复
empname maxtime newsalary
-------------------------------------------------- ------------------------------------------------------ ---------------------
bacom 2007-06-20 00:00:00.000 400.0000
ela 2007-08-20 00:00:00.000 100.0000
richer 2007-08-21 00:00:00.000 300.0000
sam 2007-07-20 00:00:00.000 200.0000

(所影响的行数为 4 行)

生活真美好 2008-10-14
  • 打赏
  • 举报
回复
select empname, max(changtime) as maxtime, (select salary from salary where changtime=max(ab.changtime) and empname = ab.empname) as newsalary from salary as ab group by empname
等不到来世 2008-10-14
  • 打赏
  • 举报
回复

select a.empname,a.salary from salary a
join (select empname,changtime=max(changtime) from salary group by empname) b
on a.empname=b.empname and a.changtime=b.changtime
水族杰纶 2008-10-14
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 hsie168518 的回复:]

两个人用一个empid ?
[/Quote]
--果然
create table salary
(
empid int,
empname varchar(50),
changtime datetime,
salary money
)

insert into salary values(2,'ela','2007-08-20',100)
insert into salary values(1,'sam','2007-06-20',50)
insert into salary values(2,'ela','2007-05-20',70)
insert into salary values(3,'richer','2007-08-21',300)
insert into salary values(4,'bacom','2007-06-20',400)
insert into salary values(2,'sam','2007-07-20',200)
select * from salary s where not exists (select 1 from salary where empname=s. empname and changtime>s.changtime)
drop table salary
/*
empid empname changtime salary
----------- -------------------------------------------------- ------------------------------------------------------ ---------------------
2 ela 2007-08-20 00:00:00.000 100.0000
3 richer 2007-08-21 00:00:00.000 300.0000
4 bacom 2007-06-20 00:00:00.000 400.0000
2 sam 2007-07-20 00:00:00.000 200.0000
*/
flyidealism 2008-10-14
  • 打赏
  • 举报
回复
select empid,max(changtime) as changtime,max(salary) as salary,
from salary
group by empid
CN_SQL 2008-10-14
  • 打赏
  • 举报
回复

select
a.*
from salary a
where not exists(
select *
from salary
where empname = a.empname
and changtime > a.changtime)
bill024 2008-10-14
  • 打赏
  • 举报
回复
select * from salary a where not exists
(select 1 from salary where changtime>a.changtime and empname=a.empname)
hsie168518 2008-10-14
  • 打赏
  • 举报
回复

两个人用一个empid ?
Garnett_KG 2008-10-14
  • 打赏
  • 举报
回复


SELECT a.*
FROM salary a,
(
SELECT empid,MAX(changtime) AS MAXTime
FROM salary
GROUP BY empid
)
WHERE a.empid=b.empid
AND a.changtime=b.MAXTime


CN_SQL 2008-10-14
  • 打赏
  • 举报
回复

select
a.*
from salary a
where not exists(
select *
from salary
where empname = a.empname
and changtime > a.changtime)
hyde100 2008-10-14
  • 打赏
  • 举报
回复

create table #salary
(
empid int,
empname varchar(50),
changtime datetime,
salary money
)

insert into #salary values(2,'ela','2007-08-20',100)
insert into #salary values(1,'sam','2007-06-20',50)
insert into #salary values(2,'ela','2007-05-20',70)
insert into #salary values(3,'richer','2007-08-21',300)
insert into #salary values(4,'bacom','2007-06-20',400)
insert into #salary values(2,'sam','2007-07-20',200)

select
*
from #salary as t1
where not exists
(
select 1
from #salary as t2
where t2.empname= t1.empname and t1.changtime < t2.changtime
)

drop table #salary
结果:
2 ela 2007-08-20 00:00:00.000 100.00
3 richer 2007-08-21 00:00:00.000 300.00
4 bacom 2007-06-20 00:00:00.000 400.00
2 sam 2007-07-20 00:00:00.000 200.00
fzcheng 2008-10-14
  • 打赏
  • 举报
回复

create table salary
(
empid int,
empname varchar(50),
changtime datetime,
salary money
)

insert into salary values(2,'ela','2007-08-20',100)
insert into salary values(1,'sam','2007-06-20',50)
insert into salary values(2,'ela','2007-05-20',70)
insert into salary values(3,'richer','2007-08-21',300)
insert into salary values(4,'bacom','2007-06-20',400)
insert into salary values(2,'sam','2007-07-20',200)

--要求:用一句sql查询出所有员工最新时间的工资

SELECT * FROM salary a WHERE NOT EXISTS
(SELECT * FROM salary WHERE empid=a.empid AND changtime>a.changtime)
加载更多回复(1)

34,593

社区成员

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

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