SQL中提取重复记录中时间最近的一条,不重复的直接取出来。时间是datetime类型的 5
处理之前:工单编号环节名称处理人环节开始时间2014102110011783工单处理1103302014/10/2119:182014102110011147工单处理11...
处理之前:
工单编号 环节名称 处理人 环节开始时间
2014102110011783 工单处理 110330 2014/10/21 19:18
2014102110011147 工单处理 110231 2014/10/21 18:17
2014102110011147 工单处理 110308 2014/10/21 18:16
2014102110010605 工单处理 110479 2014/10/21 17:46
2014102110010605 工单处理 110306 2014/10/21 17:42
2014102010002517 工单处理 100476 2014/10/21 17:41
2014102110010121 工单处理 118475 2014/10/21 17:19
2014102110010121 工单处理 110375 2014/10/21 17:17
处理之后:
工单编号 环节名称 处理人 环节开始时间
2014102110011783 工单处理 110330 2014/10/21 19:18
2014102110011147 工单处理 110231 2014/10/21 18:17
2014102110010605 工单处理 110479 2014/10/21 17:46
2014102010002517 工单处理 100476 2014/10/21 17:41
2014102110010121 工单处理 118475 2014/10/21 17:19
这是效果 展开
工单编号 环节名称 处理人 环节开始时间
2014102110011783 工单处理 110330 2014/10/21 19:18
2014102110011147 工单处理 110231 2014/10/21 18:17
2014102110011147 工单处理 110308 2014/10/21 18:16
2014102110010605 工单处理 110479 2014/10/21 17:46
2014102110010605 工单处理 110306 2014/10/21 17:42
2014102010002517 工单处理 100476 2014/10/21 17:41
2014102110010121 工单处理 118475 2014/10/21 17:19
2014102110010121 工单处理 110375 2014/10/21 17:17
处理之后:
工单编号 环节名称 处理人 环节开始时间
2014102110011783 工单处理 110330 2014/10/21 19:18
2014102110011147 工单处理 110231 2014/10/21 18:17
2014102110010605 工单处理 110479 2014/10/21 17:46
2014102010002517 工单处理 100476 2014/10/21 17:41
2014102110010121 工单处理 118475 2014/10/21 17:19
这是效果 展开
3个回答
展开全部
你这不能叫重复数据,处理人 和 环节开始时间 都是不一样的,想实现你的结果,就要对环节开始时间进行排序,对工单编号、 环节名称进行分组,然后再取
select 工单编号,环节名称,处理人,环节开始时间 from (
select ROW_NUMBER() over(partition by 工单编号,环节名称 order by 环节开始时间) ROWNO,
工单编号,环节名称,处理人,环节开始时间 ) where ROWNO=1
更多追问追答
追问
你这个语句有问题哦,能补充一下吗
追答
有点,里面忘写from 表名了
select 工单编号,环节名称,处理人,环节开始时间 from (
select ROW_NUMBER() over(partition by 工单编号,环节名称 order by 环节开始时间) ROWNO,
工单编号,环节名称,处理人,环节开始时间 from 表名
) as t where ROWNO=1
展开全部
select 工单编号,环节名称,处理人,环节开始时间 from table t,(
sleect 工单编号,max(环节开始时间) m
from table group by 工单编号)tt
where t.工单编号=tt.工单编号
and t.环节开始时间=tt.m
group by 工单编号,环节名称,处理人,环节开始时间 ;
这样试下吧,可能效率不是最高的。
sleect 工单编号,max(环节开始时间) m
from table group by 工单编号)tt
where t.工单编号=tt.工单编号
and t.环节开始时间=tt.m
group by 工单编号,环节名称,处理人,环节开始时间 ;
这样试下吧,可能效率不是最高的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
select * from
(select 工单编号,环节名称,处理人,环节开始时间,row_number() over (partition by 工单编号 order by 环节开始时间 desc) row_num form 工单表) t
where t.row_num = 1
未测试,纯手写,如有疑问可追问。
更多追问追答
追问
可以运行,但是数据多一点好像结果就对不上了哦,能帮忙解决下吗,拜托
追答
select * from 工单表 t,
(select rowid row_id,row_number() over (partition by 工单编号 order by 环节开始时间 desc) row_num form 工单表) t1
where t1.row_num = 1 and t.rowid = chartorowid(t1.row_id)
你看这样如何?
主要是里面那个子查询,你看看数据多时结果是否正确,正确的是不重复的数据row_num都等于1,重复的从1开始加,这要这个子查询没错,就不会有问题。
另外,你说的结果不对,指的是什么不对?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询