【问题标题】:how do I get mysql CASE or IF to skip a record?如何让 mysql CASE 或 IF 跳过记录?
【发布时间】:2016-07-15 08:41:47
【问题描述】:

我遍历一个数据集,我使用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 未通过第一次测试,因此不会出现在第一次通过结果中。

希望它更清楚。

【问题讨论】:

    标签: mysql sql percona


    【解决方案1】:

    只需在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
    

    【讨论】:

    • 不,不工作。它正在返回通过的第一个测试。这是我遇到的问题 - 我可以获得通过的第一个测试,但我想要的是单元进行的第一个测试如果它通过了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-04
    • 1970-01-01
    • 2012-02-22
    • 2016-02-04
    相关资源
    最近更新 更多