新足迹

 找回密码
 注册

精华好帖回顾

· 预告一下。。。演出开始。糯米排骨照片都在第2页。 (2007-9-6) 美讶 · 谈谈心得和体会——小虎说G&T unit——已更新完结 (2016-11-23) 小小白虎
· 周末Plasti Dip - GOLF R (2014-5-26) anleizhang · 史上最强大日本关西游攻略-226#穿和服被“狗仔”312#花间小路@340#更新:千鸟居让我们圆满了 (2012-6-22) 北京洋娃娃
Advertisement
Advertisement
查看: 1691|回复: 10

SQL query 请教,江湖救急! [复制链接]

头像被屏蔽

禁止发言

发表于 2013-5-9 20:19 |显示全部楼层
此文章由 hfwang 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 hfwang 所有!转贴必须注明作者、出处和本声明,并保持内容完整
一个employee table, 有好些重名的人的记录。
比如select * from employee where emp_name = 'ABC'

return:

emp_id   emp_name  emp_date

1             ABC            2012
2             ABC            2013
...



现在我想找出  ‘具有重名性质并且是most recent emp_date'  的记录

这个记录可以是select emp_id from ....

请问这样的查询怎么写?

select emp_name, count(*) from employee group by emp_name having count(*)>1
只能按名字分组重名的数量。

emp_name   count
ABC                 2
BCD                 2
...



非常感谢赐教!
Advertisement
Advertisement

发表于 2013-5-9 20:34 来自手机 |显示全部楼层
此文章由 DoubleU 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 DoubleU 所有!转贴必须注明作者、出处和本声明,并保持内容完整
Try select name, max(date) from e group by name having count(name) > 1
头像被屏蔽

禁止发言

发表于 2013-5-9 20:41 |显示全部楼层
此文章由 hfwang 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 hfwang 所有!转贴必须注明作者、出处和本声明,并保持内容完整
DoubleU 发表于 2013-5-9 20:34
Try select name, max(date) from e group by name having count(name) > 1

谢谢。

但是这个不是返回两个COLUMN了?

我只要返回一个COLUMN (EMP_ID)

发表于 2013-5-9 20:42 |显示全部楼层
此文章由 joerkky 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 joerkky 所有!转贴必须注明作者、出处和本声明,并保持内容完整
with dup_employee as (select name from e group by name having count(name) > 1) select top 1 e.name from e inner join dup_employee on e.name = dup_employee.name order by e.date desc

发表于 2013-5-9 21:36 |显示全部楼层
此文章由 DoubleU 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 DoubleU 所有!转贴必须注明作者、出处和本声明,并保持内容完整
hfwang 发表于 2013-5-9 19:41
谢谢。

但是这个不是返回两个COLUMN了?

晕,那就复杂一点

select id  from emp e,
(select name, max(date) maxdate from emp group by name having(count(name) > 1)) u
where e.name = u.name and e.date = u.maxdate;

可能还可以优化一点

  

评分

参与人数 2积分 +8 收起 理由
hfwang + 4 感谢分享
atransformer + 4 我很赞同

查看全部评分

W

发表于 2013-5-10 00:04 |显示全部楼层
此文章由 xliu 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 xliu 所有!转贴必须注明作者、出处和本声明,并保持内容完整
Advertisement
Advertisement

发表于 2013-5-10 15:58 |显示全部楼层
此文章由 zombie 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 zombie 所有!转贴必须注明作者、出处和本声明,并保持内容完整
in T-SQL you can do
select *
from
(select *, row_number() over (partition by emp_name order by emp_date desc) as rnum from employee) as a
where a.rnum=1

发表于 2013-5-10 16:05 |显示全部楼层
此文章由 cdfei 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 cdfei 所有!转贴必须注明作者、出处和本声明,并保持内容完整
在sql中用row_number() 是正道

发表于 2013-5-10 16:07 |显示全部楼层
此文章由 鱼羊鲜 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 鱼羊鲜 所有!转贴必须注明作者、出处和本声明,并保持内容完整
没说是什么server

发表于 2013-5-10 22:24 |显示全部楼层
此文章由 xmj 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 xmj 所有!转贴必须注明作者、出处和本声明,并保持内容完整
lz哪个数据库系统?说清楚
头像被屏蔽

禁止发言

发表于 2013-5-10 23:25 |显示全部楼层
此文章由 hfwang 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 hfwang 所有!转贴必须注明作者、出处和本声明,并保持内容完整
DoubleU 发表于 2013-5-9 21:36
晕,那就复杂一点

select id  from emp e,

谢谢,就是这个。

谢谢大家:)
Advertisement
Advertisement

发表回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Advertisement
Advertisement
返回顶部