任务表
TaskID Date(时间) User(发布人) Amount(金额)
1717 20120803 admin 1000 1718 20120803 admin 12000
流程表
Id taskID(任务ID) 节点步骤(Step) 处理人(ProUser) 处理时间(ProcTime) 9447 1717 Submit User01 20120804 9448 1717 UpdateSerNo User02 20120805 9449 1717 GM User03 20120806 9450 1717 Cashier User04 空 还未处理我想查出 任务表中每条任务到Cashier步骤 的处理人 ,最后每条任务最后处理时间 , 流程当前处理人,并可以根据以上条件查询我想得到的结果是
TaskID Date(时间) User(发布人) Cashier步骤处理人(StepUserName) 最后处理时间(LastTime) 当前处理人(ProcTime)
1717 20120803 admin User04 20120806 User04 1718 20120803 admin 空 空 空
TaskID Date(时间) User(发布人) Amount(金额)
1717 20120803 admin 1000 1718 20120803 admin 12000
流程表
Id taskID(任务ID) 节点步骤(Step) 处理人(ProUser) 处理时间(ProcTime) 9447 1717 Submit User01 20120804 9448 1717 UpdateSerNo User02 20120805 9449 1717 GM User03 20120806 9450 1717 Cashier User04 空 还未处理我想查出 任务表中每条任务到Cashier步骤 的处理人 ,最后每条任务最后处理时间 , 流程当前处理人,并可以根据以上条件查询我想得到的结果是
TaskID Date(时间) User(发布人) Cashier步骤处理人(StepUserName) 最后处理时间(LastTime) 当前处理人(ProcTime)
1717 20120803 admin User04 20120806 User04 1718 20120803 admin 空 空 空
select TaskId,[Date],[User],
(select top 1 ProUser from 流程表 where taskId=a.TaskId and step='Cashier') as Cashier步骤处理人,
(select top 1 ProcTime from 流程表 where taskId=a.TaskId order by ProcTime desc) as 最后处理时间,
(select top 1 ProUser from 流程表 where taskId=a.TaskId and ProUser is null order by id) as 当前处理人
from 任务表 a
但是我想根据 Cashier步骤处理人, 最后处理时间, 当前处理人 作为查询条件
(
select TaskId,[Date],[User],
(select top 1 ProUser from 流程表 where taskId=a.TaskId and step='Cashier') as Cashier步骤处理人,
(select top 1 ProcTime from 流程表 where taskId=a.TaskId order by ProcTime desc) as 最后处理时间,
(select top 1 ProUser from 流程表 where taskId=a.TaskId and ProUser is null order by id) as 当前处理人
from 任务表 a
)
select * From tt
where Cashier步骤处理人=@参数1
and 最后处理时间> @参数2 and .....
select * from tasks
--结果:
taskid date users amount
----------------------------------------------
1717 2012-08-03 00:00:00.000 admin 1000
1718 2012-08-03 00:00:00.000 admin 12000
----------------------------------------------
select * from process
--结果:
id taskid step prouser proctime
-----------------------------------------------
9447 1717 submit user01 20120804
9448 1717 updateserno user02 20120805
9449 1717 gm user03 20120806
9450 1717 cashier user04
-----------------------------------------------
--使用下面sql语句查询
select dd.taskid,dd.date,dd.users,[cashier步骤处理人],mm.proctime [最后处理时间], [当前处理人]from
(
select a.taskid TaskID,Date,a.users Users,b.prouser 'cashier步骤处理人',b.prouser '当前处理人' from tasks a left join (select *from process where step='cashier' ) b
on a.taskid=b.taskid)dd left join(select taskid,max(proctime) proctime from process group by taskid)mm
on dd.taskid=mm.taskid
--结果:
id date users cashier步骤处理人 最后处理时间 当前处理人
-------------------------------------------------
1717 2012-08-03 00:00:00.000 admin user04 20120806 user04
1718 2012-08-03 00:00:00.000 admin NULL NULL NULL
-------------------------------------------------
--如果需要查询条件的话,可以在后面添加where子句;例如:
where [当前处理人]='user04' and proctime>'2012-08-01'希望对你有帮助,共同学习!