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

时间:2016-07-15 08:41:48

标签: mysql sql percona

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

目前所有记录都会回来,无论我是否想要。我不想要的是将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;

订购

正在回归:

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

当我想要它返回时

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

如何简单地从退货集中排除我不想要的记录?

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

我们想要的是:

SN457 09:05:00

我们不想要的是:

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

SN456第一次测试失败,因此不会出现在第一次测试结果中。

希望更清楚。

1 个答案:

答案 0 :(得分:2)

只需在if ($this->array_search($schedule->getStart(), $schedule->getDescription(), $pdfArray['rows']) continue;//Or any other kind of logic you want. At this place you know that description and date staet exist in at your array level $pdfArray['other']++; // Yes this is initialized $pdfArray['rows'][$i]['id'] = $schedule->getId(); $pdfArray['rows'][$i]['date'] = $schedule->getStart()->format('d.m.Y'); $pdfArray['rows'][$i]['dateSort'] = $schedule->getStart()->format('Y-m-d H:i'); $pdfArray['rows'][$i]['from'] = $schedule->getStart()->format('H:i'); $pdfArray['rows'][$i]['to'] = $schedule->getEnd()->format('H:i'); $pdfArray['rows'][$i]['desc'] = $schedule->getDescription(); 条件中添加AND UUT_STATUS = 'passed'即可。根本不需要WHERE

编辑:根据您的评论:

CASE