我有一个名为 的表acts
,我想运行一个查询来汇总整周的行为值。我想确保查询始终为一周中的每一天返回一行,即使那天没有记录。现在我正在这样做:
def self.this_week_totals
sunday = Time.now.beginning_of_week(:sunday).strftime("%Y-%m-%d")
connection.select_values(<<-EOQ)
SELECT COALESCE(SUM(end_time - start_time), '0:00:00') AS total_time
FROM generate_series(0, 6) AS s(t)
LEFT JOIN acts
ON acts.day = '#{sunday}'::date + s.t
WHERE deleted_at IS NULL
GROUP BY s.t
ORDER BY s.t
EOQ
end
有什么办法可以在 Act 类上使它成为一个命名范围,以便它可以与其他条件结合,例如通过 a 过滤 Acts client_id
?由于acts
不在 my 中FROM
,而是在 中LEFT JOIN
,我猜不是,但也许有人知道方法。
编辑:澄清一下,无论数据库中有什么,此方法的目标是始终准确返回 7 个 Act 对象。