MySql 中的剩余天数计算 - 多个到期日
Remaining days calculation in MySql - Multiple maturities
我在计算剩余天数时遇到以下问题。在计算下一个时期的天数之前,我需要第一个时期到期。在此示例中,即使在同一天开始了 2 个 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
您需要提供更多详细信息,但您似乎想要这样:
SELECT sum(days_valid) + datediff(date, CURRENT_DATE) remaining_days
FROM tmp_dates p
group by date
| remaining_days |
| -------------: |
| 35 |
db<>fiddle here
我在计算剩余天数时遇到以下问题。在计算下一个时期的天数之前,我需要第一个时期到期。在此示例中,即使在同一天开始了 2 个 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
您需要提供更多详细信息,但您似乎想要这样:
SELECT sum(days_valid) + datediff(date, CURRENT_DATE) remaining_days FROM tmp_dates p group by date
| remaining_days | | -------------: | | 35 |
db<>fiddle here