我有两张像发票和收据这样的桌子
1. invoices
id name amt status
1 test 100 paid
2 test1 300 not paid
3 test2 400 not paid
2. receipts
id amount invoice_id receipt_date
1 50 1 22-apr-2014
2 30 1 24-apr-2014
3 30 1 25-apr-2014以下是我的查询
@invoices_info = Invoice.select("invoices.id as inv_id,receipts.receipt_date as receipt_date,sum(receipts.amount) as receipt_amount")
.joins('left join receipts on receipts.invoice_id = invoices.id')
.where("invoices.status in ('Paid')")
.group("invoices.id").order("receipts.receipt_date desc")
This query shows data as:
inv_id receipt_amount receipt_date
1 100 22-apr-2014所以问题是,它获取第一次日期而不是降序日期。我要最后一次收到日期“25-4月-2014年”。
有谁可以帮我?
发布于 2014-04-24 14:49:57
您的Invoice.select()不映射到有效的SQL。有效SQL要求SELECT子句中的每个未聚合列也出现在GROUP子句中。MySQL对GROUP的“扩展”(它允许您所做的事情)不是确定性的。(MySQL为您提供最容易获取的日期。)SQL开发人员认为这是一个bug,而不是一个特性。
我将在这个答案的其余部分使用SQL。
在PostgreSQL中执行此SQL语句。。。
select invoices.id as inv_id, receipts.receipt_date as receipt_date, sum(receipts.amount) as receipt_amount
from invoices
left join receipts on receipts.invoice_id = invoices.id
where invoices.status in ('paid')
group by invoices.id, receipts.receipt_date
order by receipts.receipt_date desc返回此输出。
1 2014-04-24 30
1 2014-04-22 80如果您只想要每个发票的和,这更有意义,您可以使用一个简单得多的SQL查询。
select invoice_id, sum(amount)
from receipts
group by invoice_id;
1 110如果您想要的金额和日期的最新收据。。。
select invoice_id, max(receipt_date), sum(amount)
from receipts
group by invoice_id;
1 2014-04-24 110https://stackoverflow.com/questions/23268726
复制相似问题