如何让 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
我循环遍历数据集,我使用 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