gpt4 book ai didi

mysql - 在带有 order by 的 Left join 中,始终从关系表中获取第一个数据。 ( rails )

转载 作者:行者123 更新时间:2023-11-29 13:01:30 25 4
gpt4 key购买 nike

我有两张表,例如发票和收据

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

所以问题是,它获取第一个日期而不是降序日期。我想要最后收货日期“2014 年 4 月 25 日”。

有人可以帮助我吗?

最佳答案

您的 Invoice.select() 未映射到有效的 SQL。有效的 SQL 要求 SELECT 子句中的每个未聚合列也出现在 GROUP BY 子句中。 MySQL 对 GROUP BY 的“扩展”(允许您执行的操作)不是确定性的。 (MySQL 会为您提供最容易获取的日期。)SQL 开发人员将此视为错误,而不是功能。

我将使用 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 110

关于mysql - 在带有 order by 的 Left join 中,始终从关系表中获取第一个数据。 ( rails ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23268726/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com