gpt4 book ai didi

sql - 我需要创建一个字段,它是 maxdate 的第二个日期

转载 作者:行者123 更新时间:2023-12-04 08:14:20 25 4
gpt4 key购买 nike

我的 SQL Server 数据库包括所有契约(Contract)。我的查询找到最新日期的契约(Contract)值(value),我需要另一列显示倒数第二个契约(Contract)的契约(Contract)值(value)。
例子:

ContractID  ordd_mn_end_date    ord_mn_billed_amt
-------------------------------------------------
8198 10-31-2021 2574.43
8198 10-31-2020 833.15
我想要发生的是 ExpiringAmt 2 显示 833.15
代码
SELECT 
det.ordd_ContractItemID,
det.ordd_mn_end_date,
det.ordd_mn_billed_amt AS Expiring_Amt,
det.ordd_mn_billed_amt AS Expiring_Amt2
FROM
ccmast_restore_20201021.dbo.lti_orddet det
WHERE
det.ordd_mn_end_date IN (SELECT MAX(det.ordd_mn_end_date)
FROM ccmast_restore_20201021.dbo.lti_orddet det
GROUP BY det.ordd_ContractItemID)
AND det.ordd_ContractItemID IN (8198)
ORDER BY
det.ordd_mn_end_date DESC

最佳答案

您可以使用窗口函数 LAG() 和 ROW_NUMBER() 来实现:

SELECT ContractID, ordd_mn_end_date, Expiring_Amt, Expiring_Amt2
FROM (
SELECT ContractID,
ordd_mn_end_date,
ord_mn_billed_amt Expiring_Amt,
LAG(ord_mn_billed_amt) OVER (PARTITION BY ContractID ORDER BY ordd_mn_end_date) Expiring_Amt2,
ROW_NUMBER() OVER (PARTITION BY ContractID ORDER BY ordd_mn_end_date DESC) rn
FROM lti_orddet
WHERE ContractID IN (8198)
) t
WHERE rn = 1
如果您只对 1 ContractID 感兴趣,就像您的查询一样,那么您可以删除 PARTITION BY ContractID从两个窗口函数。
demo .
结果:


合约编号
ordd_mn_end_date
到期_金额
到期_Amt2


8198
2021-10-31
2574.43
833.15

关于sql - 我需要创建一个字段,它是 maxdate 的第二个日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65781450/

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