我有一个有很多孩子的父类。孩子们在date_time列中保存重要的时间信息。如果孩子们都通过了我定义为min(children.start_time) > ? AND min(children.start_time) < ?, Time.now, Time.now.end_of_month + 2.month
的所需条件,我该如何选择父记录
我尝试了许多解决方案,这些解决方案都给了我错误的数据。我尝试过的一个例子:
Parent.where(is_active: true).joins("LEFT JOIN children ON parents.id = children.parent_id").group("parents.id").group("children.start_time").having("min(children.start_time) > ? AND min(children.end_time) < ?", Time.now, Time.now.end_of_month + 2.month)
这个查询让我回到父母那里,孩子们在Time.now之前的开始日期不是我所追求的。
任何指针都会非常感激。
答案 0 :(得分:1)
答案是:
Parent.where(is_active: true).joins(:children).group("parents.id").having("min(children.start_time) > ? AND min(children.end_time) < ?", Time.now, Time.now.end_of_month + 2.month)
答案 1 :(得分:0)
现在是使用scope
方法的好时机。
首先,在您的子课程中创建scope(:near_start, -> { where('min(start_time) > ? AND min(start_time) < ?, Time.zone.now, 2.months.from_now) })
:
min
(这两个标准真的应该是Parent.joins(:children).merge(Child.near_start)
吗?
group
我现在没有任何好的例子可以测试,所以我不能100%确定你需要确保它检查所有孩子,我想可以用{完成{1}}和/或having
。
我希望它能引导你一点。