废话不多说,直接进入主题,就是个查询问题,一张表里的数据有重复的,但现在跟据人名和一个时间来判断,人名不能重复,重复的人名就根据时间来判断,如果时间不为空就去不为空的那条,其他都去掉,如果有几条有时间的数据就取时间最大的,这要怎么写?
工号 姓名 时间 工作
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 取
10 回答
潇湘沐
TA贡献1816条经验 获得超6个赞
select * From [DBData].[dbo].[tb_Test] where Time=(select MAX(Time) from [DBData].[dbo].[tb_Test] where Name='ZhangSan')
萧十郎
TA贡献1815条经验 获得超13个赞
select max(nvl(时间,'0')),姓名 from table group by 姓名
这个是oracle的写法,时间为空用nvl函数指定默认值为'0',然后再取最大的时间,我的思路。
犯罪嫌疑人X
TA贡献2080条经验 获得超4个赞
SELECT
* , row_number() over(partition by 姓名 order by 时间 desc ) as rn
FROM
表名 where rn=1
繁花如伊
TA贡献2012条经验 获得超12个赞
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
)
- 10 回答
- 0 关注
- 637 浏览
添加回答
举报
0/150
提交
取消