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

例:

表成员

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/

10-08 22:43