gpt4 book ai didi

mysql - 不支持 SQL 重复列名

转载 作者:行者123 更新时间:2023-11-29 07:23:12 24 4
gpt4 key购买 nike

我有一个名为 loansRepaid 的表,如下所示,我需要编写如下所述的查询。

loanid      repaidday    dueday      settleday    payratio
301 2018-09-23 2019-02-10 14 0.0
302 2018-02-12 2018-02-24 88 0.0
303 2018-02-12 2018-02-12 -20 0.0
301 2018-02-12 2018-02-12 7 0.0
306 2018-02-12 2018-02-12 -2 1.1

我需要隔离每笔贷款的首付款。我需要使用 loanIdmin 函数和 group by 来完成此操作。所有的第一笔付款都应该存储在一个临时表中。

注意 第一笔付款是贷款附带的最早到期日的付款。

然后。我需要将创建的临时表与上面描述的 loansRepaid 表连接起来。我可以通过连接贷款人的两个表来做到这一点,并且到期日与相应贷款人的最短到期日相匹配。

我还需要选择与每笔贷款的第一笔付款相关的所有变量,为每笔贷款创建一个名为 paydefault 的新变量,如果结算日与第一笔付款相关联,则它持有 (1)大于 7 或它为 null 否则它保持 (0)。也就是说,如果第一笔付款是在到期日后 7 天支付的,或者根本没有支付。

这是我写的一个查询,但我目前卡住了,不知道从这里去哪里。

firstPay as ( 选择 loanId, min(dueday) 作为到期日
从贷款偿还
按贷款编号分组
)
从 firstPay 选择 * 作为 FP
加入 loansRepaid as Lp
在 FP.loanId = Lp.loanId
和 FP.dueDate = LP.dueDate

我也收到错误 - 不支持结果中的重复列名。

最佳答案

限定所有列引用,您将最大限度地减少此类问题。

with firstPay as (
select lr.loanId, min(lr.dueday) as dueday
from loansRepaid lr
group by lr.loanId
)
select lp.*
from firstPay fp join
loansRepaid lr
on fp.loanId = lr.loanId and
fp.dueDate = lr.dueDate;

在这种情况下,解决方案是在外部查询中只需要来自 lp 的行。 fp 中的列只是复制它们。

您可能会发现相关子查询的性能更好:

select lr.*
from loansrepaid lr
where lr.dueday = (select min(lr2.dueday)
from loansrepaid lr2
where lr2.loanid = lr.loanid
);

特别是,这可以利用 loansrepaid(loanid, dueday) 上的索引。

关于mysql - 不支持 SQL 重复列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55181302/

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