2013-07-02 56 views
0

中的行,我有以下以下MySQL的獲取根據病情狀況

--------------------------------- 
| Id  | Value | Flag | 
--------------------------------- 
| 1  | 23  | 0 | 
--------------------------------- 
| 1  | 24  | 1 | 
--------------------------------- 
| 2  | 30  | 0 | 
--------------------------------- 

我需要查詢時,應取最後兩行。這裏的條件是IF兩行具有相同的Id,那麼輸出應該獲取flag = 1的行。如果對於Id只有一行,則應該獲取Flag = 0的行。因此,輸出爲給定的要求是

--------------------------------- 
| 1  | 24  | 1 | 
--------------------------------- 
| 2  | 30  | 0 | 

回答

1

其他答案看起來是正確的給我。這是一種不同的方法:

SELECT t1.* 
FROM 
    yourtable t1 LEFT JOIN yourtable t2 
    ON t1.Id = t2.Id AND t1.Flag=0 AND t2.Flag=1 
WHERE 
    t2.Id IS NULL 

請參閱小提琴here

2
SELECT 
* 
FROM yourTable yt1 
WHERE Flag = (SELECT MAX(Flag) FROM yourTable yt2 WHERE yt1.Id = yt2.Id) 
GROUP BY Id 
1

我更喜歡uncorellated辦法...

SELECT x.* 
    FROM my_table x 
    JOIN 
    (SELECT id,MAX(flag) max_flag FROM my_table GROUP BY id) y 
    ON y.id = x.id 
    AND y.max_flag = x.flag;