很难从标题中解释,但这是我的SQL:
SELECT
SUM("payments"."amount"),
"invoices"."property_id"
FROM "payments"
JOIN "invoices"
ON "payments"."invoice_id" = "invoices"."id"
GROUP BY "property_id"
它返回特定Payment
(通过其发票连接)的所有amount
记录(Property
列)的总和。
换句话说:
Property has_many: :invoices
Invoice has_one: :payment
我正在尝试在特定日期范围之间选择付款,但必须在聚合函数“之前”发生(所以上面的确切查询也是如此,但仅适用于2017-01-01至2017-02-01 )。该字段在generated_at
Payment
答案 0 :(得分:0)
您正在寻找WHERE
条款。 (WHERE
在聚合之前执行; HAVING
在执行之后执行。)PostgreSQL中的建议日期文字是ANSI标准DATE 'YYYY-MM-DD'
。通常使用> =开始日和<来检查日期范围。结束日+ 1(为了正确处理时间部分,如果有的话)。
SELECT
SUM(p.amount),
i.property_id
FROM payments p
JOIN invoices i ON p.invoice_id = i.id
WHERE p.generated_at >= DATE '2017-01-01'
AND p.generated_at < DATE '2017-02-02'
GROUP BY i.property_id;