按 Acct # 排序,然后根据指定的文本删除,然后为每个 Acct # 代码减去时间变量
Sort by Acct # then delete based on specified text then subtract time variable for each Acct # Code attached
我需要计算某人完成一个帐户所需的时间。首先,数据需要按 "ID" 从小到大排序,然后按 "ACT_UPDATED oldest to newest (like an excel sort) However, I need to delete data where someone begins " 编辑开始”但不进行更改,因此 "Editing End" 直接位于 "Editing Begin" 下方。
ID ACT_NOTE UPDATED_BY ACT_UPDATED
1651 Editing End Name1 May-18-2015 13:05:07
46485 Editing End Name4 May-15-2015 16:38:35
111213 Comment Name3 May-19-2015 15:34:09
111213 Editing End Name3 May-19-2015 15:34:16
111213 Editing Begin Name3 May-19-2015 15:34:33
111213 Comment Name3 May-19-2015 15:35:00
111213 Editing End Name3 May-19-2015 15:35:00
556456 Editing Begin Name2 May-18-2015 12:05:53
556456 Editing End Name2 May-18-2015 12:06:00
简而言之,我希望将数据对齐为:
ID ACT_NOTE UPDATED_BY ACT_UPDATED
111213 Editing Begin Name3 5/19/2015 3:34:33 PM
111213 Comment Name3 5/19/2015 3:35:00 PM
111213 Editing End Name3 5/19/2015 3:35:00 PM
唯一保留的数据应具有以下顺序(编辑开始--评论--编辑结束)。有时 Comment 和 Editing End 的时间是一样的。
我尝试使用此代码,但它不正确:
SELECT IIF(OR(ACCT_NOTE=1,'Editing Begin',””,'Editing End')(ACT_UPDATED from ID
where ACT_NOTE !='Editing Begin' and ACT_NOTE !='Editing End';
可以看到ID 111213有两个"Editing End"可以删除。
然后最后一步是从帐户 111213 的 "Editing End" 中减去时间 (ACT_UPDATED) "Editing Begin" 以获得花费在编辑上的总时间。感谢您的宝贵时间!
Select a.*,
f.*
from(select ACT_ID
,ACT_REF_ID
,ACT_TYPE
,ACT_USER_TYPE
,ACT_NOTE
,ACT_UPDATED_BY
,ACT_UPDATED_DT
from PRISMMGR.ARA_ACTIVITIES)a
left join
(select ACCT_ID
,ACCT_NO
,ACCT_SSN
,ACCT_ID_LOB
,ACCT_POP_SEGMENT
,ACCT_SECTION
,ACCT_LOB_SYS_ID
,ACCT_CREATED_DT
from PRISMMGR.ARA_ACCOUNTS)f
on a.ACT_REF_ID = f.ACCT_ID
where ACT_TYPE != 'ADD' and ACT_TYPE != 'DELETE' and ACT_TYPE != 'USER ENTRY' and ACT_UPDATED_DT > '14/MAY/2015'
你可以得到你想要的顺序:
select ID, ACT_NOTE, UPDATE_BY, ACCT_UPDATED, ns.sortOrder
from myTable t
left join NoteSort ns on t.ACT_NOTE = ns.note
order by t.ID, t.ACCT_UPDATED, ns.sortOrder;
假设你做了一个 table 这样的:
create table NoteSort
( note nvarchar(100) primary key, sortOrder int ) ;
insert into NoteSort values ( 'Editing Begin', 1 );
insert into NoteSort values ( 'Comment', 2 );
insert into NoteSort values ( 'Editing End', 3 );
但这并没有解决确保所有三个 'activities'(开始、评论、结束)的困难部分。为此,您只需 select Comments 并加入自身即可找到 Begin 和 End 活动。像这样:
;with x as (
-- make a derived table with the sort order of activities
select ID, ACT_NOTE, UPDATE_BY, ACCT_UPDATED, ns.noteOrder,
row_number() over ( partition by ID order by acct_Updated, ns.noteOrder )
as activityNum
from myTable t
left join NoteSort ns on t.ACT_NOTE = ns.note
)
select x.id, x.act_note, x.update_by, x.acct_updated,
completeActvities.EditingTime
from x
inner join (
-- join the three activities together, which will filter out any
-- that don't occur one after the other
select x_comment.id
, x_begin.activityNum as begin_ActivityNum
, x_comment.activityNum as comment_ActivityNum
, x_end.activityNum as end_ActivityNum
, cast( ( x_end.acct_updated - x_begin.acct_updated ) as time ) as EditingTime
from x x_comment
inner join x x_begin on x_comment.id = x_begin.id
and x_begin.activityNum = x_comment.activityNum-1
and x_begin.noteOrder = 1
inner join x x_end on x_comment.id = x_end.id
and x_end.activityNum = x_comment.activityNum+1
and x_end.noteOrder =3
where x_comment.NoteOrder = 2
) as completeActvities
-- join back to the main list, filtering for only
-- the activities with the complete set
on x.id = completeActvities.id
and x.activityNum in ( completeActvities.begin_activityNum, completeActvities.comment_activityNum, completeActvities.end_activityNum )
order by id, activityNum
我需要计算某人完成一个帐户所需的时间。首先,数据需要按 "ID" 从小到大排序,然后按 "ACT_UPDATED oldest to newest (like an excel sort) However, I need to delete data where someone begins " 编辑开始”但不进行更改,因此 "Editing End" 直接位于 "Editing Begin" 下方。
ID ACT_NOTE UPDATED_BY ACT_UPDATED
1651 Editing End Name1 May-18-2015 13:05:07
46485 Editing End Name4 May-15-2015 16:38:35
111213 Comment Name3 May-19-2015 15:34:09
111213 Editing End Name3 May-19-2015 15:34:16
111213 Editing Begin Name3 May-19-2015 15:34:33
111213 Comment Name3 May-19-2015 15:35:00
111213 Editing End Name3 May-19-2015 15:35:00
556456 Editing Begin Name2 May-18-2015 12:05:53
556456 Editing End Name2 May-18-2015 12:06:00
简而言之,我希望将数据对齐为:
ID ACT_NOTE UPDATED_BY ACT_UPDATED
111213 Editing Begin Name3 5/19/2015 3:34:33 PM
111213 Comment Name3 5/19/2015 3:35:00 PM
111213 Editing End Name3 5/19/2015 3:35:00 PM
唯一保留的数据应具有以下顺序(编辑开始--评论--编辑结束)。有时 Comment 和 Editing End 的时间是一样的。
我尝试使用此代码,但它不正确:
SELECT IIF(OR(ACCT_NOTE=1,'Editing Begin',””,'Editing End')(ACT_UPDATED from ID
where ACT_NOTE !='Editing Begin' and ACT_NOTE !='Editing End';
可以看到ID 111213有两个"Editing End"可以删除。
然后最后一步是从帐户 111213 的 "Editing End" 中减去时间 (ACT_UPDATED) "Editing Begin" 以获得花费在编辑上的总时间。感谢您的宝贵时间!
Select a.*,
f.*
from(select ACT_ID
,ACT_REF_ID
,ACT_TYPE
,ACT_USER_TYPE
,ACT_NOTE
,ACT_UPDATED_BY
,ACT_UPDATED_DT
from PRISMMGR.ARA_ACTIVITIES)a
left join
(select ACCT_ID
,ACCT_NO
,ACCT_SSN
,ACCT_ID_LOB
,ACCT_POP_SEGMENT
,ACCT_SECTION
,ACCT_LOB_SYS_ID
,ACCT_CREATED_DT
from PRISMMGR.ARA_ACCOUNTS)f
on a.ACT_REF_ID = f.ACCT_ID
where ACT_TYPE != 'ADD' and ACT_TYPE != 'DELETE' and ACT_TYPE != 'USER ENTRY' and ACT_UPDATED_DT > '14/MAY/2015'
你可以得到你想要的顺序:
select ID, ACT_NOTE, UPDATE_BY, ACCT_UPDATED, ns.sortOrder
from myTable t
left join NoteSort ns on t.ACT_NOTE = ns.note
order by t.ID, t.ACCT_UPDATED, ns.sortOrder;
假设你做了一个 table 这样的:
create table NoteSort
( note nvarchar(100) primary key, sortOrder int ) ;
insert into NoteSort values ( 'Editing Begin', 1 );
insert into NoteSort values ( 'Comment', 2 );
insert into NoteSort values ( 'Editing End', 3 );
但这并没有解决确保所有三个 'activities'(开始、评论、结束)的困难部分。为此,您只需 select Comments 并加入自身即可找到 Begin 和 End 活动。像这样:
;with x as (
-- make a derived table with the sort order of activities
select ID, ACT_NOTE, UPDATE_BY, ACCT_UPDATED, ns.noteOrder,
row_number() over ( partition by ID order by acct_Updated, ns.noteOrder )
as activityNum
from myTable t
left join NoteSort ns on t.ACT_NOTE = ns.note
)
select x.id, x.act_note, x.update_by, x.acct_updated,
completeActvities.EditingTime
from x
inner join (
-- join the three activities together, which will filter out any
-- that don't occur one after the other
select x_comment.id
, x_begin.activityNum as begin_ActivityNum
, x_comment.activityNum as comment_ActivityNum
, x_end.activityNum as end_ActivityNum
, cast( ( x_end.acct_updated - x_begin.acct_updated ) as time ) as EditingTime
from x x_comment
inner join x x_begin on x_comment.id = x_begin.id
and x_begin.activityNum = x_comment.activityNum-1
and x_begin.noteOrder = 1
inner join x x_end on x_comment.id = x_end.id
and x_end.activityNum = x_comment.activityNum+1
and x_end.noteOrder =3
where x_comment.NoteOrder = 2
) as completeActvities
-- join back to the main list, filtering for only
-- the activities with the complete set
on x.id = completeActvities.id
and x.activityNum in ( completeActvities.begin_activityNum, completeActvities.comment_activityNum, completeActvities.end_activityNum )
order by id, activityNum