【问题标题】:Calculate number of payments done between two dates SQL计算两个日期之间完成的付款次数 SQL
【发布时间】:2021-06-20 05:48:46
【问题描述】:

我想计算 SQL 中两个日期之间的付款次数,包括开始日期。

例如如果第一个付款日期是 2020 年 8 月 28 日,随后的付款在每个月的 28 日完成。

我想计算到目前为止完成了多少付款。

我试过 select datediff(month,'2020-08-28 00:00:00.000','2021-03-28 00:00:00.000') 它给出 7,但我希望它是 8。

如果我尝试 select datediff(month,'2020-08-28 00:00:00.000','2021-04-01 00:00:00.000') 它给出 8。

我想知道从 28/08/2020 算起的月数。 2020 年 8 月 28 日应计为 1。

想要的结果应该如下

28/08/2020 - 1
28/09/2020 - 2
28/10/2020 - 3
28/11/2020 - 4
28/12/2020 - 5
28/01/2021 - 6
28/02/2021 - 7
28/03/2021 - 8

请您给点建议。谢谢。

编辑

如果第一个付款日期是 2020 年 1 月 30 日,因为没有 2 月 30 日,它应该是月底的日期,并且应该显示为到目前为止已完成的 2 笔付款。

【问题讨论】:

  • 如果第一个付款日期是 1 月 30 日会怎样?二月没有第 30 天。
  • 在这种情况下,2 月的最后一天将作为 1 个月。通常付款日期为每月 28 日或更早
  • 我们不会根据“通常”之类的词编写代码。定义您的要求。如果您需要特殊的月末日期逻辑,那是一个(常见的)并发症。是时候编写一些 IMO 用例来帮助您理解“复杂性”了。
  • 嗨@SMor,我已经编辑了我的问题,见上面的编辑。如果第一个付款日期是 2020 年 1 月 30 日,因为没有 2 月 30 日,它应该是月底的日期,并且应该显示为到目前为止已完成的 2 笔付款。

标签: sql sql-server date sql-server-2012 date-difference


【解决方案1】:

这是你要找的吗?

Declare @dates Table (PaymentDate date);

 Insert Into @dates (PaymentDate)
 Values ('2020-08-28'), ('2020-09-28'), ('2020-10-28'), ('2020-11-28'), ('2020-12-28'), ('2021-01-28'), ('2021-02-28'), ('2021-03-28');

 Select *
      , PaymentCount = datediff(month, min(PaymentDate) over(Order By PaymentDate), PaymentDate) + 1
   From @dates;

【讨论】:

    猜你喜欢
    • 2017-11-05
    • 2021-07-20
    • 2018-04-13
    • 2019-07-06
    • 1970-01-01
    • 1970-01-01
    • 2019-02-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多