Как создать динамическое ГДЕ с этим Select? - PullRequest
2 голосов
/ 15 июня 2011

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

Обработанные и удаленные выборки (средние выборки) возвращают мне 2 набора данных каждый.

есть ли способ динамически получить результаты этих средних выборов и использовать их, чтобы добавить МЕЖДУ в мое ГДЕ?IN PURE SQL?

Я должен использовать их, чтобы сделать предложения where для высшего выбора.Первое значение среднего выбора выбирается в моем, где правильно, но я теряю второе, что они выбирают каждый раз, и поэтому мой выбор - это данные режима возврата, тогда ожидаемые.

    select b.bug_id, SUM(b.added) as rework
from    (select distinct b.bug_id, b.added, b.bug_when
        from bugs_activity as b, 
        (select b.bug_id,b.bug_when 
              from bugs_activity as b 
                  where b.bug_id = 13131 
                  and b.fieldid = 8 
                  and b.added like '%Rework%' 
               order by b.bug_when desc limit 500) as worked,
        (select b.bug_id,b.bug_when 
              from bugs_activity as b 
                  where b.bug_id = 13131 
                  and b.fieldid = 8 
                  and b.removed like '%Rework%' 
              order by bug_when desc limit 500) as removed        
        where b.bug_when between worked.bug_when and removed.bug_when
        and b.fieldid = 45
        and b.bug_id = worked.bug_id
        and b.bug_id = removed.bug_id
        and b.bug_id = 13131
        limit 500) as b
group by b.bug_id;

Мне нужно, где стать чем-товот так (works.bug_when3 просто для объяснения может быть чем угодно)

where b.bug_when between worked.bug_when and removed.bug_when
or
b.bug_when between worked.bug_when2 and removed.bug_when2
or
b.bug_when between worked.bug_when3 and removed.bug_when3

Ответы [ 2 ]

2 голосов
/ 15 июня 2011

HAVING работает с вычисленными значениями из набора результатов и может использоваться с псевдонимами.

В вашем случае:

SELECT b.bug_id, SUM(b.added) AS rework
FROM
    ...
    LIMIT 500) as b
GROUP BY b.bug_id    
HAVING b.bug_when > 10 AND b.bug_when < 20;

Вам может потребоваться выбрать поля, которые вам нужны для HAVING в вашем топе SELECT (т.е. SELECT b.bug_id, SUM(b.added) AS rework, b.bug_when).

EDIT:

Чтобы иметь несколько интервалов:

HAVING 
  (b.bug_when > 10 AND b.bug_when < 20) 
  OR (b.bug_when2 > 23 AND b.bug_when2 < 41) 
  OR (b.bug_when3 > 152 AND b.bug_when3 < 241)
1 голос
/ 15 июня 2011

Проверяли ли вы следующее (используя подвыборы):

...
where b.bug_when between
    (select b.bug_when
    from bugs_activity as b
    where b.bug_id = 13131
    and b.fieldid = 8
    and b.added like '%Rework%'
    order by b.bug_when
    desc limit 1)
and
    (select b.bug_when
    from bugs_activity as b
    where b.bug_id = 13131
    and b.fieldid = 8
    and b.removed like '%Rework%'
    order by bug_when
    desc limit 1)
...

?

Ps.Вы должны знать, что вам следует избегать подвыборов, подумал ... Я считаю, что создание двух отдельных запросов для получения этих двух значений и последующего их включения в запрос будет быстрее, чем использование подвыборов ...

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