废话不多说,直接进入主题,就是个查询问题,一张表里的数据有重复的,但现在跟据人名和一个时间来判断,人名不能重复,重复的人名就根据时间来判断,如果时间不为空就去不为空的那条,其他都去掉,如果有几条有时间的数据就取时间最大的,这要怎么写?
工号 姓名 时间 工作
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 取
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',然后再取最大的时间,我的思路。
谢谢,本人已解决
SELECT
* , row_number() over(partition by 姓名 order by 时间 desc ) as rn
FROM
表名 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
)
谢谢,本人已解决