我遍历数据集,我使用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 未通过其第一次测试,因此不会出现在第一次通过结果中。
希望这能更清楚。
只需在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