sql server排序问题

金素妍 2014-01-02 07:48:53
数据表结构 UID 工单号 工单处理人 工单类型 ... 录入时间数据
eadabyas 1007 admin a 2013-10-20 12:30:30
tysfdgr 1008 user007 b 2013-10-20 12:30:31
ad4545tr 1009 user001 a 2013-10-20 12:30:35
wersdfdfg 1000 admin b 2013-10-20 12:30:39
tasdjuh 1005 admin b 2013-10-20 12:30:59
我想按工单号得到该工单最后一次处理的数据 即3,4,5条数据怎么写SQL语句啊? 用DISTINCT 其他列没法出现,可以不用考虑排序问题,我只要1个工单号只出现一次的数据集就可以,请帮忙谢谢大家。
...全文
130 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 6 楼 jinsuyan123 的回复:
[quote=引用 5 楼 yupeigu 的回复:] [quote=引用 4 楼 jinsuyan123 的回复:] [quote=引用 2 楼 yupeigu 的回复:] 这个是不是有问题啊,好像不对把,应该是某个工单处理人的最后一次处理的数据把
个工单处理人的最后一次处理的数据是这样的啊,就是distint出不来数据。[/quote] 你试试这个代码,distinct只是除去,达不到你的要求的,直有用row_number函数,比较简单的,一下代码适合2005及以上的版本 :
drop table tb
go

create table tb(
UID varchar(20),工单号 int,工单处理人 varchar(20),
工单类型 varchar(20),
录入时间数据 datetime
)

insert into tb
select 'eadabyas',    1007      ,'admin',     'a',      '2013-10-20 12:30:30' union all
select 'tysfdgr',     1008      ,'user007',   'b',       '2013-10-20 12:30:31' union all
select 'ad4545tr',       1009      ,'user001','a',   '2013-10-20 12:30:35' union all
select 'wersdfdfg',       1000      ,'admin', 'b',  '2013-10-20 12:30:39' union all
select 'tasdjuh',     1005      ,'admin',     'b',     '2013-10-20 12:30:59'
go


select UID,工单号 ,工单处理人,工单类型,录入时间数据
from 
(
select *,
       ROW_NUMBER() over(partition by 工单处理人 order by 录入时间数据 desc) rownum
from tb
)t
where rownum = 1
/*
UID	工单号	工单处理人	工单类型	录入时间数据
tasdjuh	1005	admin	b	2013-10-20 12:30:59.000
ad4545tr	1009	user001	a	2013-10-20 12:30:35.000
tysfdgr	1008	user007	b	2013-10-20 12:30:31.000
*/
[/quote] 必须是2005版本吗[/quote] 2005、2008都可以的,2000不行,2000没有row_number函数
金素妍 2014-01-02
  • 打赏
  • 举报
回复
引用 5 楼 yupeigu 的回复:
[quote=引用 4 楼 jinsuyan123 的回复:] [quote=引用 2 楼 yupeigu 的回复:] 这个是不是有问题啊,好像不对把,应该是某个工单处理人的最后一次处理的数据把
个工单处理人的最后一次处理的数据是这样的啊,就是distint出不来数据。[/quote] 你试试这个代码,distinct只是除去,达不到你的要求的,直有用row_number函数,比较简单的,一下代码适合2005及以上的版本 :
drop table tb
go

create table tb(
UID varchar(20),工单号 int,工单处理人 varchar(20),
工单类型 varchar(20),
录入时间数据 datetime
)

insert into tb
select 'eadabyas',    1007      ,'admin',     'a',      '2013-10-20 12:30:30' union all
select 'tysfdgr',     1008      ,'user007',   'b',       '2013-10-20 12:30:31' union all
select 'ad4545tr',       1009      ,'user001','a',   '2013-10-20 12:30:35' union all
select 'wersdfdfg',       1000      ,'admin', 'b',  '2013-10-20 12:30:39' union all
select 'tasdjuh',     1005      ,'admin',     'b',     '2013-10-20 12:30:59'
go


select UID,工单号 ,工单处理人,工单类型,录入时间数据
from 
(
select *,
       ROW_NUMBER() over(partition by 工单处理人 order by 录入时间数据 desc) rownum
from tb
)t
where rownum = 1
/*
UID	工单号	工单处理人	工单类型	录入时间数据
tasdjuh	1005	admin	b	2013-10-20 12:30:59.000
ad4545tr	1009	user001	a	2013-10-20 12:30:35.000
tysfdgr	1008	user007	b	2013-10-20 12:30:31.000
*/
[/quote] 必须是2005版本吗
  • 打赏
  • 举报
回复
引用 4 楼 jinsuyan123 的回复:
[quote=引用 2 楼 yupeigu 的回复:] 这个是不是有问题啊,好像不对把,应该是某个工单处理人的最后一次处理的数据把
个工单处理人的最后一次处理的数据是这样的啊,就是distint出不来数据。[/quote] 你试试这个代码,distinct只是除去,达不到你的要求的,直有用row_number函数,比较简单的,一下代码适合2005及以上的版本 :
drop table tb
go

create table tb(
UID varchar(20),工单号 int,工单处理人 varchar(20),
工单类型 varchar(20),
录入时间数据 datetime
)

insert into tb
select 'eadabyas',    1007      ,'admin',     'a',      '2013-10-20 12:30:30' union all
select 'tysfdgr',     1008      ,'user007',   'b',       '2013-10-20 12:30:31' union all
select 'ad4545tr',       1009      ,'user001','a',   '2013-10-20 12:30:35' union all
select 'wersdfdfg',       1000      ,'admin', 'b',  '2013-10-20 12:30:39' union all
select 'tasdjuh',     1005      ,'admin',     'b',     '2013-10-20 12:30:59'
go


select UID,工单号 ,工单处理人,工单类型,录入时间数据
from 
(
select *,
       ROW_NUMBER() over(partition by 工单处理人 order by 录入时间数据 desc) rownum
from tb
)t
where rownum = 1
/*
UID	工单号	工单处理人	工单类型	录入时间数据
tasdjuh	1005	admin	b	2013-10-20 12:30:59.000
ad4545tr	1009	user001	a	2013-10-20 12:30:35.000
tysfdgr	1008	user007	b	2013-10-20 12:30:31.000
*/
金素妍 2014-01-02
  • 打赏
  • 举报
回复
引用 2 楼 yupeigu 的回复:
这个是不是有问题啊,好像不对把,应该是某个工单处理人的最后一次处理的数据把
个工单处理人的最后一次处理的数据是这样的啊,就是distint出不来数据。
  • 打赏
  • 举报
回复
应该是这样把,因为你的工单号都是不一样的,只有工单处理人是有一样的:
drop table tb
go

create table tb(
UID varchar(20),工单号 int,工单处理人 varchar(20),
工单类型 varchar(20),
录入时间数据 datetime
)

insert into tb
select 'eadabyas',    1007      ,'admin',     'a',      '2013-10-20 12:30:30' union all
select 'tysfdgr',     1008      ,'user007',   'b',       '2013-10-20 12:30:31' union all
select 'ad4545tr',       1009      ,'user001','a',   '2013-10-20 12:30:35' union all
select 'wersdfdfg',       1000      ,'admin', 'b',  '2013-10-20 12:30:39' union all
select 'tasdjuh',     1005      ,'admin',     'b',     '2013-10-20 12:30:59'
go


select UID,工单号 ,工单处理人,工单类型,录入时间数据
from 
(
select *,
       ROW_NUMBER() over(partition by 工单处理人 order by 录入时间数据 desc) rownum
from tb
)t
where rownum = 1
/*
UID	工单号	工单处理人	工单类型	录入时间数据
tasdjuh	1005	admin	b	2013-10-20 12:30:59.000
ad4545tr	1009	user001	a	2013-10-20 12:30:35.000
tysfdgr	1008	user007	b	2013-10-20 12:30:31.000
*/
  • 打赏
  • 举报
回复
这个是不是有问题啊,好像不对把,应该是某个工单处理人的最后一次处理的数据把
金素妍 2014-01-02
  • 打赏
  • 举报
回复
没人搭理我吗?

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧