2013-07-02 55 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;