Неверный результат оператора SQL - PullRequest
0 голосов
/ 11 августа 2011

У меня есть запрос, который возвращает неверный результат, и я не могу его исправить, неправильный расчет,

Мой запрос:

select TIMEDIFF(a.CREATED,b.CREATED) 
from
(
  select changegroup.CREATED 
  from changegroup,changeitem,project,jiraissue
  where  changegroup.id=changeitem.groupid
  and field='Group'
  and oldString='Triage' 
  and jiraissue.id=changegroup.issueid 
  and project.id=jiraissue.project 
  and project.pname='Test'
  and jiraissue.CREATED between '2011-08-11 14:01:00' and  '2011-08-11 14:11:00'  
) a,
(
  select jiraissue.CREATED 
  from jiraissue ,changegroup,project
  where jiraissue.id=changegroup.issueid 
  and project.id=jiraissue.project 
  and project.pname='Test'
  and jiraissue.CREATED between '2011-08-11 14:01:00' and '2011-08-11 14:11:00' 
) b;

результат подзапроса1:

enter image description here

результат подзапроса2:

enter image description here

Результат запроса:

enter image description here

Требуемый результат:

enter image description here

Соотношение между таблицами

enter image description here

спасибо

1 Ответ

0 голосов
/ 11 августа 2011

Прежде всего, я бы переписал ваш запрос следующим образом, просто чтобы четко показать связи между таблицами в запросе:

select TIMEDIFF(a.created,b.created) 
from
    (
        select g.created
        from   changegroup g
        join   changeitem ci on (ci.groupId = g.id)
        join   jiraissue ji on (ji.id = g.id)
        join   project p on (p.id = ji.project)
        where  ci.field = 'Group'
               and ci.oldString = 'Triage' 
               and p.pname = 'Test'
               and ji.created between '2011-08-11 14:01:00' and  '2011-08-11 14:11:00'
    ) a
join    (
        select ji.created
        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-11 14:11:00' 
    ) b;

Я думаю, что вам не хватает связи между двумя подзапросами.Это действительно зависит от того, чего вы пытаетесь достичь.Если я вас хорошо понял, и вы просто хотите рассчитать разницу во времени между датой создания проблемы jira и датой создания, к которой относится проблема, следующий запрос должен помочь (более того, основываясь на вашем запросе):

select TIMEDIFF(a.created,b.created) 
from
    (
        select g.created, g.id as groupid
        from   changegroup g
        join   changeitem ci on (ci.groupId = g.id)
        join   jiraissue ji on (ji.id = g.id)
        join   project p on (p.id = ji.project)
        where  ci.field = 'Group'
      and  ci.oldString = 'Triage' 
      and  p.pname = 'Test'
      and  ji.created between '2011-08-11 14:01:00' and  '2011-08-11 14:11:00'
    ) a
left join   (
        select ji.created, g.id as groupid
        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-11 14:11:00' 
    ) b ON (a.groupid = b.groupid)

Пожалуйста, уточните подробно, что вы пытаетесь достичь, и, возможно, я мог бы помочь больше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...