2011-08-12 71 views
0

我必须编写一个SQL语句,它包含一个连续包含两个不同值的字段,但是按照我写它的方式,它总是返回null,因为它被解释为具有相同的两个值时间!编写SQL语句的问题

我的条件应为:(ci.field = '组' 和ci.oldString = '分流')和(ci.field = '受让人' 和ci.newString不是NULL)

也就是说的装置计算工作时间:当问题被分配到名为分流组,当这个问题被分配到一个人

如何解决呢?

我的SQL语句:

select TIMEDIFF(a.created,b.created) 
from 
(select g.created, g.issueid as groupid1 
    from changegroup g 
    join changeitem ci on (ci.groupid = g.id) 
    join jiraissue ji on (ji.id = g.issueid) 
    join project p on (p.id = ji.project) 
    join priority pr on (pr.id = ji.priority) 
    where ci.field = 'Group' 
    and ci.oldString = 'Triage' 
    and ci.field='assignee' 
    and ci.newString is not NULL 
    and p.pname = 'Test' 
    and pr.pname='P1' 
    and ji.created between '2011-08-11 14:01:00' and '2011-08-12 14:11:00' 
) a 
left join (
    select ji.created, ji.id as groupid2 
    from jiraissue ji 
    join changegroup g on (g.issueid = ji.id) 
    join project p on (p.id = ji.project) 
    where p.pname = 'Test' 
     and ji.created between '2011-08-11 14:01:00' and '2011-08-12 14:11:00' 
) b ON (a.groupid1 = b.groupid2); 

这是表从至极,我应该检索数据

enter image description here

+0

你要么输错了你的条件,要么有错的东西,它要求'ci.field ='Group'和ci.field ='assignee''是真的,这是不可能的。 – nobody

+0

我还没有输入错误:(我应该计算第一次当field ='group'和newstring =“groupx”,第二次当field ='assignee'和newstring <> NULL时,请查看picutre也许你可以理解我想要的,比你的 – rym

+0

你有一个相当不好的例子,因为你提供的sql包含_way比示例数据更难以弄清楚什么是键(你怎么确定我只能得到1条记录,其中field ='group'和oldstring ='Triage')以及相关内容。除此之外,您忘记了指定查询的主要目标,即计算这两条记录之间的timediff。 – Eddy

回答

0

见我对你的问题的质量,但如何解决提示评论这就像(假设你可以确保这不会产生1-n连接)

select groupid_orsomething_else, TIMEDIFF(a.created, b.created) 
from yourtable 
left join 
(select groupid_orsomething_else, created 
    from yourtable 
    where field = 'Group' and oldstring is 'Triage' 
) a 
on a.groupid_orsomething_else = yourtable.groupid_orsomething_else 
left join 
(select groupid_orsomething_else, created 
    from yourtable 
    where field = 'assignee' and oldstring is null) b 
on b.groupid_orsomething_else = yourtable.groupid_orsomething_else