2016-07-15 2 views
0

データセットをループして、CASEを使用して、条件(uut_status)が 'passed'に設定されているかどうかを確認します。その条件が設定されている場合は、レコードが必要です。そうでなければ私はしません。レコードをスキップするには、どのようにmysql CASEまたはIFを取得しますか?

現時点では、私が望むかどうかにかかわらず、すべての記録が戻ってきます。 、uut_serial_numberによって

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_status uut_serial_numberのASCによって
順序をPRODUCT_ID;:私はしたくないものはnullに設定case文で確認した値に戻って来ています

戻っている:

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.30amでテストされ、合格します。SN457は9.05amでテストされています。それは通ります。

私たちがしたいことは次のとおりです。

SN457 09:05:00 

我々はしたくない何かがある:SN456は、その最初のテストに失敗したため、最初のパスの結果に表示されていない

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

希望が明確になります。

答えて

2

AND UUT_STATUS = 'passed'WHEREの条件に追加するだけです。 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 
+0

いいえ、動作していません。合格した最初のテストが返されます。これは私がヒットした問題です。最初のテストをパスすることができますが、私が望むのは、ユニットが通過した最初のテストです。 – gedq

+0

@gedq最新の回答をご覧ください – Peter

関連する問題