我有以下
---------------------------------
| 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 |
答案 0 :(得分:2)
SELECT
*
FROM yourTable yt1
WHERE Flag = (SELECT MAX(Flag) FROM yourTable yt2 WHERE yt1.Id = yt2.Id)
GROUP BY Id
答案 1 :(得分:1)
我更喜欢非核心方法......
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;
答案 2 :(得分: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。