/*下面将获取所有已完成的任务。*/
insert ignore into NodeInstanceLog_Dump
select nil.id, nil.connection, nil.log_date, nil.externalId,
nil.nodeContainerId, nil.nodeId ,nil.nodeInstanceId,
coalesce(nil.nodename, nil3.name)nodename, nil.nodeType, nil.processId,
nil.processInstanceId , nil.referenceId, nil.slaCompliance, nil.sla_due_date,
nil.type, nil.workItemId, 0 as activeStatus
from bpm.NodeInstanceLog nil
inner join bpm.VariableInstanceLog vil
ON nil.processInstanceId=vil.processInstanceId
and vil.value='Success'
and vil.variableId in ('oltOrderStatus','orderStatus')
and nodeType='EndNode'
and type=0
left join
(
SELECT distinct nil2.*,nil1.nodeName name
from bpm.NodeInstanceLog nil1 inner join
(
SELECT max(convert(nodeinstanceid,signed))id,processInstanceId
from bpm.NodeInstanceLog
where nodetype='HumanTaskNode'group by processInstanceId
)nil2 ON nil1.nodeinstanceid=nil2.id
and nil1.processInstanceId=nil2.processInstanceId
)nil3 ON nil.processInstanceId=nil3.processInstanceId;
/*下面将获取所有中止的任务。*/
insert ignore into NodeInstanceLog_Dump
select nil.id, nil.connection, nil.log_date, nil.externalId,
nil.nodeContainerId, nil.nodeId ,nil.nodeInstanceId,
coalesce(nil.nodename, nil3.name)nodename, nil.nodeType, nil.processId,
nil.processInstanceId , nil.referenceId, nil.slaCompliance, nil.sla_due_date,
nil.type, nil.workItemId, 0 as activeStatus
from bpm.NodeInstanceLog nil
inner join bpm.VariableInstanceLog vil
ON nil.processInstanceId=vil.processInstanceId
and vil.value='Aborted'
and vil.variableId in ('oltOrderStatus','orderStatus')
and nodeType='EndNode'
and type=0
left join
(
SELECT distinct nil2.*,nil1.nodeName name
from bpm.NodeInstanceLog nil1 inner join
(
SELECT max(convert(nodeinstanceid,signed))id,processInstanceId
from bpm.NodeInstanceLog
where nodetype='HumanTaskNode'group by processInstanceId
)nil2 ON nil1.nodeinstanceid=nil2.id
and nil1.processInstanceId=nil2.processInstanceId
)nil3 ON nil.processInstanceId=nil3.processInstanceId;
(来自评论(
Table:NodeInstanceLog Columns:
id bigint(20) AI PK
connection varchar(255)
log_date datetime
externalId varchar(255)
nodeId varchar(255)
nodeInstanceId varchar(255)
nodeName varchar(255)
nodeType varchar(255)
processId varchar(255)
processInstanceId bigint(20)
sla_due_date datetime
slaCompliance int(11)
type int(11)
workItemId bigint(20)
nodeContainerId varchar(255)
referenceId bigint(20)
其中一些索引可能会有所帮助:
NodeInstanceLog: INDEX(processInstanceId)
NodeInstanceLog: INDEX(nodeinstanceid, nodeName, processInstanceId)
VariableInstanceLog: INDEX(processInstanceId, value, variableId)
添加复合索引时,请使用具有相同前导列的DROP索引。也就是说,当您同时拥有INDEX(a(和INDEX(a,b(时,抛出前者。
max(convert(nodeinstanceid,signed))
——这是否意味着nodeinstanceid
是VARCHAR
,但需要作为一个数字进行比较?我建议您找到一种方法将其存储在INT
或其他类型的数字列中;这可以使查询运行得更快。此外,该列在NodeInstanceLog
中吗?是PRIMARY KEY
吗?表现在有哪些索引(包括PK(?
为了帮助读者理解查询,请使用ON
指定表的关联方式,使用WHERE
进行筛选。
请用它们的表别名来限定所有列——例如,我不知道type
和nodeType
在哪个表中。因此,上面的INDEX
建议可能不完整。