猿问

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

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

工号      姓名         时间                         工作

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       取

ibeautiful
浏览 638回答 10
10回答

弑天下

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

潇湘沐

select * From [DBData].[dbo].[tb_Test] where Time=(select MAX(Time) from [DBData].[dbo].[tb_Test] where Name='ZhangSan')  

摇曳的蔷薇

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

偶然的你

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

萧十郎

select max(nvl(时间,'0')),姓名 from table group by 姓名 这个是oracle的写法,时间为空用nvl函数指定默认值为'0',然后再取最大的时间,我的思路。

慕斯王

谢谢,本人已解决

犯罪嫌疑人X

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

天涯尽头无女友

谢谢,本人已解决

繁花如伊

 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  )

拉莫斯之舞

谢谢,本人已解决
随时随地看视频慕课网APP

相关分类

SQL Server
我要回答