gpt4 book ai didi

sql - rails : How to get column value if present in history?

转载 作者:行者123 更新时间:2023-11-29 13:17:48 25 4
gpt4 key购买 nike

我有 3 个表,

问题

|id|subject|done_ratio|
-----------------------
|1 |test | 50 |
|2 |test1 | 0 |
|3 |test3 | 10 |

期刊

|id|issue_id|notes|created_on         |
---------------------------------------
|1 |1 |NULL |2017-09-29 16:35:09|
|2 |3 |test |2017-09-28 16:35:09|

期刊详情

|id|journal_id|prop_key  |old_value|value|
------------------------------------------
|1 |1 |done_ratio|0 |50 |

基本上有3个模型。

问题

has_many :journals

期刊

belongs_to :issue
has_many :journal_details

期刊详情

belongs_to :journal

JournalsJournal details 表用于维护Issue 历史。

如果更新了问题的某些属性,则会为每个更新的属性创建一个journal 条目以及journal details。如果只是将注释添加到 issue,则只会使用该注释创建 journal 条目。

如何获取问题列表以及今天之前 done_ratio值或0(如果未找到)?

我可以先获取所有问题,然后在单独的查询中为每个问题获取今天之前的 done_ratio

发现问题

issues = Issue.all

在今天之前找到每个问题的 done_ratio

journal = issue.journals.joins(:details).where("journal_details.prop_key ='done_ratio' AND DATE(journals.created_on) = ?", Date.today).order('journals.created_on asc').limit(1).first
last_done_ratio = journal.details.where(prop_key: 'done_ratio').first.old_value.to_f unless journal.blank?

但这会增加加载时间。所以,我想在一个查询中完成。

Coalesce 可能在这里起作用,但不知道如何起作用。

如有任何帮助,我们将不胜感激。

最佳答案

您可以使用以下查询找到今天之前的问题列表以及 done_ratio 的值:

Issue
.joins(journals: :journal_details)
.where(journal_details: { prop_key: 'done_ratio' })
.where("DATE(journals.created_on) = ?", Date.today)
.order('journals.created_on asc')

它不会返回没有与 prop_key 'done_ratio' 关联的期刊详细信息的问题。如果您还需要解决没有“done_ratio”详细信息的问题,则需要使用 OUTER JOIN:

Issue
.joins("LEFT OUTER JOIN journals ON issues.id = journals.issue_id")
.joins("LEFT OUTER JOIN journal_details ON journals.id = journal_details.journal_id")
.where(journal_details: { prop_key: 'done_ratio' })
.where("DATE(journals.created_on) = ?", Date.today)
.order('journals.created_on asc')

关于sql - rails : How to get column value if present in history?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46488302/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com