我需要获取不在数据库内部的月份列表。
例:
表成员
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有关吗?我是否需要一个
stored procedure
可以通过Member's code
的地方? 最佳答案
我的想法是使用一个数字表,其中仅包含从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'
请参阅小提琴here。
关于mysql - 存储过程中的月份计算,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20029149/