我花了很长时间试图解决这个问题,我需要过滤此表:
+----+-------+-------+
| id | jobID |stageID|
+----+-------+-------+
| 1 | 1 | 1 |
| 2 | 1 | 2 |
| 3 | 1 | 2 |
| 4 | 1 | 1 |
| 5 | 2 | 2 |
| 6 | 2 | 1 |
| 7 | 2 | 1 |
| 8 | 2 | 2 |
+----+-------+-------+
您看到每个作业都有很多不同阶段的行,我需要获取每个作业每个阶段的最后一行。
例如,看作业1。它有4行,每行都有一个给定的阶段。我需要获取该工作阶段的最后一个条目,即第3行和第4行。
因此对于整个表,我需要像这样获得第3、4、7和8行
+----+-------+-------+
| id | jobID |stageID|
+----+-------+-------+
| 3 | 1 | 2 |
| 4 | 1 | 1 |
| 7 | 2 | 1 |
| 8 | 2 | 2 |
+----+-------+-------+
我想我会发疯的。我尝试使用GROUP_BY
,但它不对工作进行计数就对阶段进行了分组。
你能帮我吗?
答案 0 :(得分:0)
这很简单:
select max(id) as id, jobID, stageID
from yourtable
group by jobID, stageID
如果需要选择其他信息,请将其用作子选择:
select yourtable.id, yourtable.jobID, yourtable.stageID, yourtable.other
from (
select max(id) as id
from yourtable
group by jobID, stageID
) max_job_stage_ids
join yourtable using (id)
或使用IN
(我发现这在可视化查询计划方面没有多大帮助,但有些人喜欢它):
select id, jobID, stageID, other
from yourtable
where id in (select max(id) from yourtable group by jobID, stageID)