Как мне написать запрос, который возвращает количество записей в определенном состоянии из последних двадцати (но только если эти двадцать произошли сегодня?) - PullRequest
0 голосов
/ 21 марта 2011

Мне нужно написать запрос, который сообщит мне, сколько раз тест не удался в течение последних двадцати попыток (но только подсчета попыток, предпринятых сегодня и только если было предпринято по меньшей мере двадцать попыток сегодня). Меня особенно интересуеттолько те, которые потерпели неудачу 10 или более раз за последние 20 итераций.

Схема:

test_results
-----------------
id
test_id
status (0 failed, 1 passed)
date_ran 

Вот как далеко я дошел до потери сюжета:

SELECT count(*) as num_failed, test_id 
FROM test_results
WHERE
date_ran > '2011-03-21 00:00:00'
AND
    status = 0
AND
    test_id IN ( -- some sort of subquery that gives me tests that have run
                  at least 20 times today, regardless of status --)
GROUP BY test_id
HAVING num_failed > 9
ORDER BY date_ran DESC

Ответы [ 3 ]

1 голос
/ 22 марта 2011

Следующее должно возвратить все тесты, которые были выполнены по крайней мере 20 раз сегодня, из которых по крайней мере 10 провалились.

select test_id
      ,count(*)               as num_runs
      ,sum(status)            as passed
      ,count(*) - sum(status) as failed
  from test_results
 where date_ran = current_date
 group 
    by test_id 
having count(*) >= 20
   and count(*) - sum(status) >= 10;

Я использовал тот факт, что статус = 1 можно суммировать. Если у вас есть другие значения для статуса, вам нужно использовать вместо этого выражение CASE / WHEN.

0 голосов
/ 21 марта 2011
select test_id,sum(status=0) as num_failed,count(*) as total from test_results as t1
where (select count(*) from test_results as t2
       where t1.test_id = t2.test_id and t1.date_ran < t2.date_ran) <20 and date_ran > curdate()
group by test_id
having num_failed > 9 and total = 20
0 голосов
/ 21 марта 2011

используйте Limit 0, 20, а также вместо num_failed в HAVING, вам нужно использовать count (*) напрямую -

SELECT count(*) as num_failed, test_id 
FROM test_results
WHERE
date_ran > '2011-03-21 00:00:00'
AND
    status = 0
AND
    test_id IN ( -- some sort of subquery that gives me tests that have run
                  at least 20 times today, regardless of status --)
GROUP BY test_id
HAVING count(*) > 9
ORDER BY date_ran DESC
LIMIT 0,20
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...