加入收藏 | 设为首页 | Life家族 | SCMLife | RMLife | PMLife | SQALife | TESTLife | 企业VIP专区 | 中文化荣誉殿堂

查看完整版本: 查询解决期限在60内的defect

香蕉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

还是没具体说咋整的~~:(
页: [1]
查看完整版本: 查询解决期限在60内的defect