给出一个如下表格,称为form_letters:
+---------------+----+
| respondent_id | id |
+---------------+----+
| 3 | 1 |
| 7 | 2 |
| 7 | 3 |
+---------------+----+
如何选择除了没有给定respondent_id的最大id值的行之外的每一行。
示例结果:
+---------------+----+
| respondent_id | id |
+---------------+----+
| 3 | 1 |
| 7 | 3 |
+---------------+----+
答案 0 :(得分:2)
这样的事情应该有用;
SELECT respondent_id, MAX(id) as id FROM form_letters
group by respondent_id
MySQL小提琴:
答案 1 :(得分:1)
有很多方法可以做到这一点。 group by
使用max()
,或使用not exits
并使用left join
这里使用左连接,这在索引列
的性能方面更好select
f1.*
from form_letters f1
left join form_letters f2 on f1.respondent_id = f2.respondent_id
and f1.id < f2.id
where f2.respondent_id is null
使用not exits
select f1.*
from form_letters f1
where not exists
(
select 1 from form_letters f2
where f1.respondent_id = f2.respondent_id
and f1.id < f2.id
)
<强> Demo 强>
答案 2 :(得分:0)
这是我将如何做到的。获取子查询中的最大ID,然后将其连接回原始表。接下来,限制ID不等于最大ID的记录。
编辑:与此相反。限制ID = MaxID的记录。代码更改如下。
Select FL.Respondent_ID, FL.ID, A.Max_ID
From Form_Letters FL
left join (
select Respondent_ID, Max(ID) as Max_ID
from Form_Letters
group by Respondent_ID) A
on FL.Respondent_ID = A.Respondent_ID
where FL.ID = A.Max_ID