gpt4 book ai didi

sql - SQL Server 中的递归查询问题

转载 作者:行者123 更新时间:2023-12-04 23:45:15 25 4
gpt4 key购买 nike

我在 SQL Server 中遇到递归查询问题。

假设我有 2 个表:

  1. Holiday:这个表存储了所有的假期(holidayDate不是工作日)
  2. Invoice:此表存储下一个付款日期(nextPaymentDate)

如果 nextPaymentDate 在假期表中的 holidayDate 上,那么我需要更新它:

nextPaymentDate = nextPaymentDate + 1 day

此步骤需要处理,直到 nextPaymentDate 不再是 holidayDate

请看下面的示例数据示例:

假期表:

HolidyaID      HolidayDate
-----------------------------
1 2012-01-02
2 2012-01-03
3 2012-01-04
4 2012-01-08
5 2012-01-12
6 2012-01-13
7 2012-01-20
8 2012-01-21
9 2012-01-22
10 2012-01-23
11 2012-01-29
12 2012-01-30

发票

InvoiceID      NextPaymentDate
------------------------------
1 2012-01-01
2 2012-01-02
3 2012-01-09
4 2012-01-20

运行此查询后,我想像这样查看 Invoice 表中的数据

InvoiceID      NextPaymentDate
-------------------------------
1 2012-01-01
2 2012-01-05
3 2012-01-09
4 2012-01-24

我如何创建一个 SQL 查询来输出这个结果?

您可以在 http://sqlfiddle.com/#!6/de346/3 测试这个查询

谢谢!

最佳答案

select InvoiceID,
Case when [holidaydate] is null then [NextPaymnetDate]
else
DateAdd(dd,1,
(Select min([holidaydate]) from holiday h
where h.[holidaydate]>[NextPaymnetDate]
and not exists(Select * from holiday h2 where h2.[holidaydate]=DateAdd(dd,1,h.[holidaydate]))
))
end
from invoice
left Join holiday on [holidaydate]=[NextPaymnetDate]

关于sql - SQL Server 中的递归查询问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14540308/

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