我有一个包含三列的表:job_id、part 和 time,分别代表车间作业的 ID、该作业中制造的零件以及该作业所花费的时间。
在此表中,较高的 job_id 对应于较新的作业。例如,对于 F 部分,job_id = 10 表示最近的作业,而 job_id = 2 表示最旧的作业。
我需要选择最近作业(即 job_id 最高的行)的“时间”为 0 的部分的所有行。例如:
A 部分: 选择它,因为其最近的作业 (job_id = 1) 的时间 = 0。
B 部分: 选择两行,因为其最近的作业 (job_id = 8) 的时间 = 0。
F 部分: 不要选择任何行,因为其最近的作业 (job_id = 10) 没有时间 = 0。 想要的结果
由于我们根据最近的工作时间从不同部分选择行,因此我相信我需要按部分对数据进行分区。为了实现这一点,我使用 ROW_NUMBER() 函数为每个组分配行号。 带有行号的表格
但是,我不确定如何使用这些分区数据来提取所需的结果。
我正在使用 MySQL 来完成此任务。
with table_1(job_id,part,time)AS
(
select 1,'a',0 union all
select 2,'f',0 union all
select 3,'f',0 union all
select 4,'c',10 union all
select 5,'b',0 union all
select 6,'d',5 union all
select 7,'f',0 union all
select 8,'b',0 union all
select 9,'e',0 union all
select 10,'f',10
)
SELECT T.JOB_ID,Z.PART, T.TIME FROM
(
SELECT XQ.JOB_ID,XQ.PART,XQ.TIME FROM
(
select t.job_id,t.part,t.time,
ROW_NUMBER()over(partition by t.part order by t.job_id desc)as xcol
from table_1 as t
)AS XQ
WHERE XQ.xcol=1 AND XQ.TIME=0
)Z
JOIN TABLE_1 AS T ON Z.PART=T.PART
请尝试一下这个。我竭尽全力实施建议的解决方案