我需要写一个查询,告诉我在最近二十次尝试中测试失败了多少次(但仅计算今天进行的尝试,并且仅当今天至少进行了二十次尝试时才计入。)我对那些尝试特别感兴趣在最近20次迭代中失败10次或更多次的结果。

架构:

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

最佳答案

以下应返回所有今天已运行至少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;


我利用了status = 1可以求和的事实。如果您还有其他状态值,则需要使用CASE / WHEN表达式。

关于mysql - 我该如何编写查询以返回最近二十条中处于特定状态的记录数(但仅当今天发生了二十条时)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5381201/

10-11 03:00