香蕉231 2008-5-10 14:21
查询解决期限在60内的defect
各位大侠,我要写一个解决期限在60天内,即:解决时间-提交时间<=60天这样一个查询,执行下面的sql语句查询到的Max(action_timestamp)是history表中的最大时间,不是某个记录的Max(action_timestamp),请问,怎样取到一个记录的最大Max(action_timestamp)?
select T1.dbid,[font=宋体][/font]
T1.id,
T1.headline,
T1.severity,
T1.questiontype,
T3.name,
T7.login_name,
T26.name,
T1.description,
T1.analysis,
T1.submit_date,
T25.name,
T25.company,
T1.district
from ((((((CR.Defect T1 INNER JOIN CR.statedef T3 ON T1.state = T3.id)
INNER JOIN CR.users T7 ON T1.owner = T7.dbid) INNER JOIN
CR.project T26 ON T1.project = T26.dbid) INNER JOIN CR.history T4 ON
T1.dbid = T4.entity_dbid and 16777244 = T4.entitydef_id) LEFT OUTER JOIN
CR.parent_child_links T25mm ON
T1.dbid = T25mm.parent_dbid and 16780602 = T25mm.parent_fielddef_id) LEFT
OUTER JOIN CR.customer T25 ON T25mm.child_dbid = T25.dbid)
where T1.dbid <> 0 and T1.owner = T7.dbid and T3.name = '已完成' and
T1.dbid = T4.entity_dbid and T4.new_state = '已完成' and
DateDiff(dd,(select Max(action_timestamp)
from CR.history T4
where T4.new_state = '已完成'),(select Min(action_timestamp)
from CR.history T4
where T4.action_name = '提交'))<60
[[i] 本帖最后由 香蕉231 于 2008-5-10 14:27 编辑 [/i]]
asukataozi 2008-5-12 10:37
你加2个字段:SubmitDate,ResolveDate,在提交任务和解决任务的时候分别将Date赋给这2个字段,然后查询这2个字段值的差小于60天的记录
[[i] 本帖最后由 asukataozi 于 2008-5-12 10:39 编辑 [/i]]
scmtata 2008-5-12 10:48
回复 楼主 的帖子
加字段方法实现成本太高了,查询应该就可以了
你的max语句查询的是history表里全部的记录,肯定是history表里最大的,应该表连接defect表
asukataozi 2008-5-12 11:17
[quote]原帖由 [i]scmtata[/i] 于 2008-5-12 10:48 发表 [url=http://bbs.scmlife.com/redirect.php?goto=findpost&pid=90360&ptid=12434][img]http://bbs.scmlife.com/images/common/back.gif[/img][/url]
加字段方法实现成本太高了,查询应该就可以了
你的max语句查询的是history表里全部的记录,肯定是history表里最大的,应该表连接defect表 [/quote]
呵呵,LZ似乎没有连接到Defect表,检查下是不是这块错了: T1.dbid = T4.entity_dbid and 16777244 = T4.entitydef_id
香蕉231 2008-5-12 13:13
谢谢,两位楼兄的解答。这个查询我终于搞定了!
select dbid,cqid,headline,当前状态,提交时间,解决时间,datediff(dd,abc.提交时间,abc.解决时间) 天数
from (
select
T1.dbid,
T1.id CQID,
T1.headline,
T2.name 当前状态,
T3.login_name 所有者,
(select T7.action_timestamp
from CR.history T7
where T1.dbid = T7.entity_dbid and 16777244 = T7.entitydef_id and action_name = '提交') 提交时间,
(select top 1 T8.action_timestamp
from CR.history T8
where T1.dbid = T8.entity_dbid and 16777244 = T8.entitydef_id and action_name = '已完成'
order by T8.action_timestamp desc) 解决时间
from
CR.Defect T1,
CR.statedef T2,
CR.users T3
where
T1.state = T2.id
and T1.owner = T3.dbid
and (T1.dbid <> 0)
and T2.name in ('已完成')
) abc
where datediff(dd,abc.提交时间,abc.解决时间)<60
[[i] 本帖最后由 香蕉231 于 2008-5-13 13:07 编辑 [/i]]
asukataozi 2008-5-12 13:14
具体说说咋搞定的丫..
tinali 2008-5-12 14:11
楼主写的SQL语句是有点复杂,我费劲的看了半天。一刷新发现楼主说搞定了。::em58::
香蕉231 2008-5-13 13:16
谢谢tinali版主的查看,那个sql语句是根据cq自动生成的sql修改的,搞了半天没搞定,后来就重新写了
asukataozi 2008-5-13 13:53
还是没具体说咋整的~~:(