Rails 5 - 我需要 return 一组的第一条记录,但有些记录没有组
Rails 5 - I need to return the first record of a group, but there are records that have no group
因此,正如标题所示,我需要 return 来自 table 的记录,其中这些记录可以属于一个组。
如果一组中有几条记录,return只有最后一条,如果记录不属于任何组,return一起。
我有以下 tables
(automation_execution) 1 --> n (automation_execution_action) 1 <---> 1 (workable)
我需要 return 可行的 table 记录,它们可能会或可能不会链接到自动化 tables。
automation_execution
id
company_id
1
1
2
1
automation_execution_ations
id
automation_execution_id
workable_id
1
1
1
2
1
2
可行
id
company_id
status
created_at
1
1
finished
2022-01-19 19:48:24
2
1
processing
2022-01-19 18:00:24
3
1
processing
2022-01-19 18:00:24
4
1
processing
2022-01-19 18:00:24
在上面的例子中,我们有 4 个可行的方法,1 和 2 属于自动化,而 3 和 4 不属于,在这个例子中我需要 return 记录 2、3 和 4。
所以这个 SQL 有效:
select workables.*
from (
select workables.*,
automation_execution_actions.automation_execution_id,
row_number()
over (partition by automation_execution_actions.automation_execution_id order by workables.id desc) as rn
from workables
left join automation_execution_actions on automation_execution_actions.workable_id = workables.id
) as workables
where rn = 1
OR automation_execution_id IS NULL
order by id;
因此,正如标题所示,我需要 return 来自 table 的记录,其中这些记录可以属于一个组。 如果一组中有几条记录,return只有最后一条,如果记录不属于任何组,return一起。
我有以下 tables
(automation_execution) 1 --> n (automation_execution_action) 1 <---> 1 (workable)
我需要 return 可行的 table 记录,它们可能会或可能不会链接到自动化 tables。
automation_execution
id | company_id |
---|---|
1 | 1 |
2 | 1 |
automation_execution_ations
id | automation_execution_id | workable_id |
---|---|---|
1 | 1 | 1 |
2 | 1 | 2 |
可行
id | company_id | status | created_at |
---|---|---|---|
1 | 1 | finished | 2022-01-19 19:48:24 |
2 | 1 | processing | 2022-01-19 18:00:24 |
3 | 1 | processing | 2022-01-19 18:00:24 |
4 | 1 | processing | 2022-01-19 18:00:24 |
在上面的例子中,我们有 4 个可行的方法,1 和 2 属于自动化,而 3 和 4 不属于,在这个例子中我需要 return 记录 2、3 和 4。
所以这个 SQL 有效:
select workables.*
from (
select workables.*,
automation_execution_actions.automation_execution_id,
row_number()
over (partition by automation_execution_actions.automation_execution_id order by workables.id desc) as rn
from workables
left join automation_execution_actions on automation_execution_actions.workable_id = workables.id
) as workables
where rn = 1
OR automation_execution_id IS NULL
order by id;