如何让 mysql CASE 或 IF 跳过记录?

how do I get mysql CASE or IF to skip a record?

我循环遍历数据集,我使用 CASE 检查条件 (uut_status) 是否设置为 'passed'。如果设置了该条件,那么我想要记录。如果不是那我就不会。

现在所有的记录都回来了,不管我要不要。我不想要的那些返回时将 case 语句中检查的值设置为 null:

select CASE WHEN UUT_STATUS = 'passed' THEN  uut_serial_number END, 
    CASE WHEN UUT_STATUS = 'passed' THEN  uut_status END, 
    CASE WHEN UUT_STATUS = 'passed' THEN  min(START_DATE_TIME) END

from 
  uut_result 
where
 (START_DATE_TIME > '2016-06-16 00:00:00' AND START_DATE_TIME < '2016-06-16 23:59:59') and product_id=2513 and BATCH_SERIAL_NUMBER like "12 Initial Response Test" 

按 uut_serial_number、uut_status、product_id
分组 按 uut_serial_number asc;

排序

是returning:

SN123   Passed  2016-06-16 08:50:20
SN124   Passed  2016-06-16 16:46:57
NULL    NULL    NULL
SN126   Passed  2016-06-16 00:43:59

当我想要 return 是

SN123   Passed  2016-06-16 08:50:20
SN124   Passed  2016-06-16 16:46:57
SN126   Passed  2016-06-16 00:43:59

如何简单地从 return 集中排除不需要的记录?

澄清 - 以 SN456 为例。 SN456 在上午 9 点进行测试。它失败。但是,在调整之后,它在上午 9 点 30 分再次测试并通过。 SN457 在上午 9 点 05 分进行测试。它通过了。

我们要的是:

SN457 09:05:00

我们不想要的是:

SN457 09:05:00
SN456 09:30:00

SN456 未能通过第一次测试,因此不会出现在第一次通过结果中。

希望这样更清楚。

只需在WHERE条件中添加AND UUT_STATUS = 'passed'即可。根本不需要 CASE


编辑:根据您的评论:

SELECT 
  (CASE WHEN UUT_STATUS = 'passed' THEN  uut_status END) as UUT_STATUS `,
...
GROUP BY uut_serial_number, uut_status, product_id
HAVING UUT_STATUS = 'passed'
ORDER BY uut_serial_number ASC