gpt4 book ai didi

mysql - 存储过程中的月份计算

转载 作者:行者123 更新时间:2023-11-29 08:18:37 25 4
gpt4 key购买 nike

我需要获取不在数据库内的月份列表。

示例:

成员

ID | Member's code | Member since
1 | 555-12 | 2012-11-22

成员资格

ID |   Code  | Paid
1 | 555-12 | 2013-1-1
2 | 555-12 | 2013-3-12
3 | 555-12 | 2013-5-1

假设今天是:2013-11-17

我需要得到这样的输出:

Member's code  |  Debt ( Months )
555-12 | 11-2012
555-12 | 12-2012
555-12 | 2-2013
555-12 | 4-2013

这可以用 SQL 来完成吗?我是否需要有一个存储过程来传递成员代码

最佳答案

我的想法是使用一个数字表,其中只包含从 0 到 100 或更多的数字:

CREATE TABLE numbers (
n INT
);

INSERT INTO numbers (n)
VALUES
(0),(1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12),(13),(14),(15)...;

然后您可以使用如下查询:

SELECT
m.ID,
m.Code,
DATE_FORMAT(m.Member_since + INTERVAL num.n MONTH, '%m-%Y') As Debt_Month_Year
FROM
members m INNER JOIN numbers num
ON TIMESTAMPDIFF(MONTH, m.Member_since, LAST_DAY(CURDATE()))>=num.n
LEFT JOIN membership ms
ON
m.Code = ms.Code
AND
LAST_DAY(ms.Paid)=LAST_DAY(m.Member_since + INTERVAL num.n MONTH)
WHERE
ms.id IS NULL
-- and if you wish, add the following line:
AND m.Code = '555-12'

请参阅 fiddle here .

关于mysql - 存储过程中的月份计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20029149/

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