MySql中的剩余天数计算-多个到期日

MySql中的剩余天数计算-多个到期日,mysql,subscription,maturity,Mysql,Subscription,Maturity,在计算剩余天数时,我遇到以下问题。我需要第一个周期在计算下一个周期的天数之前过期。在本例中,即使在同一天开始了两个为期30天的时段,但持续时间为60天,因此,截至今天,还有38天,而不是我公式中给出的16天。 让我们把它想象成一种订阅模式,在这种模式中,用户需要在30天内支付两次费用。 到目前为止,这是我的解决方案 CREATE TEMPORARY TABLE `tmp_dates`( `date` datetime NOT NULL, `days_valid` integer NOT

在计算剩余天数时,我遇到以下问题。我需要第一个周期在计算下一个周期的天数之前过期。在本例中,即使在同一天开始了两个为期30天的时段,但持续时间为60天,因此,截至今天,还有38天,而不是我公式中给出的16天。 让我们把它想象成一种订阅模式,在这种模式中,用户需要在30天内支付两次费用。 到目前为止,这是我的解决方案

CREATE TEMPORARY TABLE `tmp_dates`(
  `date` datetime NOT NULL,
  `days_valid` integer NOT NULL    
);

insert into tmp_dates (date, days_valid) values ('2021-05-10', 30);
insert into tmp_dates (date, days_valid) values ('2021-05-10', 30);

SELECT sum(CASE
             WHEN Datediff(Date_add(date, INTERVAL days_valid day),
                  CURRENT_DATE) <
                  0
           THEN 0
             ELSE Datediff(Date_add(date, INTERVAL days_valid day),
                  CURRENT_DATE)
           end) AS remaining_days
FROM   tmp_dates p;

--from 2021-05-10 to 2021-06-10 (8 days remaining) + 30 (additional days remaining) = 38 days remaining
创建临时表`tmp\u日期`(
`date`datetime不为空,
`天\u有效`整数不为空
);
在tmp_日期(日期,有效天数)值中插入('2021-05-10',30');
在tmp_日期(日期,有效天数)值中插入('2021-05-10',30');
选择总和(大小写)
当Datediff(日期)添加(日期、间隔天数、有效日期)时,
当前日期)<
0
然后0
ELSE Datediff(日期\添加(日期、间隔天数\有效日期),
当前日期)
结束)作为剩余天数
从tmp_日期开始;
--从2021-05-10到2021-06-10(剩余8天)+30(剩余额外天数)=剩余38天

您需要提供更多详细信息,但似乎您需要:

|剩余天数| | -------------: | | 35 |
dbfiddle

您的主键是什么?今天是什么日子?2021-06-01?@草莓:不,今天是
当前日期()@像这样的鲁克不会让人困惑!!啊,刚才我确实读了代码中的最后一条评论。。。。。。这个问题需要更多信息!,因为一个名为
days\u valid
的专栏表明某些东西在这段时间内有效,而不是在30天内有效……我刚刚做了一些澄清,以更好地理解这一需要。@Raymont你能把这个问题的回答状态改为已接受,赏金归eshirvana所有,并让它离开悬赏名单吗?
SELECT sum(days_valid) + datediff(date, CURRENT_DATE) remaining_days
FROM  tmp_dates p
group by date 
| remaining_days | | -------------: | | 35 |