作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有 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
Journals
和Journal 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/
我是一名优秀的程序员,十分优秀!