sql查询时如何合并两行数据,具体如下。

select requestid, logid, operatedate,operatetime, operator from workflow_requestlog where requestid='502' order by logid以requestid字段为分组,查出每组按照logid排序。得出后面的结果。结果中第一行数据可以不要,因为没有之前的时间。数据中的时间是当前处理时间,也是下一个接收时间,logid是处理顺序,requestid是这个事件的ID。目的是同一事件,查询出每个处理的时间。能列出当前接收时间与处理时间,也就可以算出处理的时间了。
不用游标,直接用sql语句不能实现了么。

看样子像sqlserver,就按sqlserver的写了

创建测试表,数据:

create table test
(requestid int,
logid int,
operatedate varchar(10),
operatetime varchar(10),
operator int);


insert into test values (502,1372,'2018-06-13','16:16:03',155);
insert into test values (502,1446,'2018-06-14','09:00:32',153);
insert into test values (502,1472,'2018-06-14','09:33:07',157);
insert into test values (502,1474,'2018-06-14','09:35:11',151);
insert into test values (502,1657,'2018-06-14','15:17:10',153);
insert into test values (502,1660,'2018-06-14','15:18:17',155);
insert into test values (502,1661,'2018-06-14','15:19:01',153);
insert into test values (502,1662,'2018-06-14','15:19:48',157);
insert into test values (502,1677,'2018-06-14','15:31:34',151);
insert into test values (502,1694,'2018-06-14','16:42:51',12);
insert into test values (502,1709,'2018-06-14','18:08:45',9);
insert into test values (502,1730,'2018-06-15','08:09:14',158);
insert into test values (502,1732,'2018-06-15','08:09:16',157);

执行:

with t as
(select test.*,row_number() over (partition by requestid order by logid) rn from test)
select t1.requestid,t1.logid,cast(t1.operatedate+' '+t1.operatetime as datetime) begintime,cast(t2.operatedate+' '+t2.operatetime as datetime) endtime,t1.operator from t t1 left join t t2 on t1.requestid=t2.requestid and t1.rn=t2.rn+1

查询结果:

最后时间没按你那种方式显示,你那种到时候算操作时间也麻烦,还不如改成时间日期类型了。

温馨提示:答案为网友推荐,仅供参考
相似回答