首页 新闻 会员 周边 捐助

简单的数据库查询,可惜我不会写!

0
悬赏园豆:5 [已解决问题] 解决于 2016-02-26 08:44

废话不多说,直接进入主题,就是个查询问题,一张表里的数据有重复的,但现在跟据人名和一个时间来判断,人名不能重复,重复的人名就根据时间来判断,如果时间不为空就去不为空的那条,其他都去掉,如果有几条有时间的数据就取时间最大的,这要怎么写?

工号      姓名         时间                         工作

1          张三        null                           XX

2          张三        2016-02-12 08:00     XX        取

3          李四        2016-02-12 08:00      XX

4          李四        2016-02-12 09:00      XX        取

5          王五        null                            XX       取

搁忆的主页 搁忆 | 小虾三级 | 园豆:612
提问于:2016-02-23 11:14
< >
分享
最佳答案
0
select max(时间),姓名 
from table
group by 姓名

 

收获园豆:1
米修君 | 小虾三级 |园豆:553 | 2016-02-23 12:08

谢谢,本人已解决

搁忆 | 园豆:612 (小虾三级) | 2016-02-24 14:28
其他回答(5)
0
  select * From [DBData].[dbo].[tb_Test] where Time=(select MAX(Time) from [DBData].[dbo].[tb_Test] where Name='ZhangSan')

 

收获园豆:1
龙葛格 | 园豆:782 (小虾三级) | 2016-02-23 11:31

还有整合所有数据,最终的表数据里姓名就是唯一

支持(0) 反对(0) 搁忆 | 园豆:612 (小虾三级) | 2016-02-23 11:40
0

简单的工作,可惜我不会做。换一个复杂点的工作吧,这样就会做了,工资还高。

爱编程的大叔 | 园豆:30844 (高人七级) | 2016-02-23 14:29
0

select max(nvl(时间,'0')),姓名 from table group by 姓名

这个是oracle的写法,时间为空用nvl函数指定默认值为'0',然后再取最大的时间,我的思路。

收获园豆:1
、朔风 | 园豆:151 (初学一级) | 2016-02-23 14:32

谢谢,本人已解决

支持(0) 反对(0) 搁忆 | 园豆:612 (小虾三级) | 2016-02-24 14:28
1

SELECT
* , row_number() over(partition by 姓名 order by 时间 desc ) as rn
FROM
表名  where rn=1

收获园豆:1
峰和日丽 | 园豆:110 (初学一级) | 2016-02-23 14:39

谢谢,本人已解决

支持(0) 反对(0) 搁忆 | 园豆:612 (小虾三级) | 2016-02-24 14:28
0

 delete a from T_worker a where
 exists
 (
    select 1 from T_worker where name = a.name and jobNo != a.jobNo and (time > a.time or a.timer is null)
 )

但是这样写还是存在一个问题,比如有两条记录姓名相同时间都是null,都会被删掉。

若工号不为空,且时间大的工号也大,则可改为姓名相同保留工号最大的记录,相应的语句为:

 delete a from T_worker a where
 exists
 (
    select 1 from T_worker where name = a.name and jobNo > a.jobNo
 )

收获园豆:1
脚本王子 | 园豆:779 (小虾三级) | 2016-02-24 10:07

谢谢,本人已解决

支持(0) 反对(0) 搁忆 | 园豆:612 (小虾三级) | 2016-02-24 14:28
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册