为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

ibeautiful 2018-12-07 01:43:29
废话不多说,直接进入主题,就是个查询问题,一张表里的数据有重复的,但现在跟据人名和一个时间来判断,人名不能重复,重复的人名就根据时间来判断,如果时间不为空就去不为空的那条,其他都去掉,如果有几条有时间的数据就取时间最大的,这要怎么写? 工号      姓名         时间                         工作 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贡献1818条经验 获得超8个赞

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

 

查看完整回答
反对 回复 2019-01-07
?
潇湘沐

TA贡献1816条经验 获得超6个赞

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

 

查看完整回答
反对 回复 2019-01-07
?
摇曳的蔷薇

TA贡献1793条经验 获得超6个赞

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

查看完整回答
反对 回复 2019-01-07
?
偶然的你

TA贡献1841条经验 获得超3个赞

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

查看完整回答
反对 回复 2019-01-07
?
萧十郎

TA贡献1815条经验 获得超13个赞

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

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

查看完整回答
反对 回复 2019-01-07
?
慕斯王

TA贡献1864条经验 获得超2个赞

谢谢,本人已解决

查看完整回答
反对 回复 2019-01-07
?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

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

查看完整回答
反对 回复 2019-01-07
?
天涯尽头无女友

TA贡献1831条经验 获得超9个赞

谢谢,本人已解决

查看完整回答
反对 回复 2019-01-07
?
繁花如伊

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
 )

查看完整回答
反对 回复 2019-01-07
?
拉莫斯之舞

TA贡献1820条经验 获得超10个赞

谢谢,本人已解决

查看完整回答
反对 回复 2019-01-07
  • 10 回答
  • 0 关注
  • 637 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信