提取订阅期间内计费日期的总发生次数

flmtquvp  于 2021-06-25  发布在  Mysql
关注(0)|答案(1)|浏览(289)

尝试查找帐单日期在整个订阅期间内发生的时间。
例如,如果订阅期为2015年1月26日和2016年9月24日,则计费日期为每月27日。因此,查询应返回20作为完成的票据周期数。

dauxcl2d

dauxcl2d1#

您需要使用mysql数字生成器来生成日期序列。
查询

SELECT 
 COUNT(*) AS 'number of days'
FROM ( 

  SELECT 
   '2015-01-26' + INTERVAL generator.number DAY AS date
  FROM ( 

    SELECT 
     (@number  := @number + 1) AS number
    FROM (
      SELECT 0 UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9
    ) AS record_1
    CROSS JOIN (
      SELECT 0 UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9
    ) AS record_2
    CROSS JOIN (
      SELECT 0 UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9
    ) AS record_3
    CROSS JOIN (
      SELECT 0 UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9
    ) AS record_4
    CROSS JOIN ( SELECT @number := 0 ) AS init_user_param 
  ) AS generator
) AS dates 
WHERE 
   dates.date BETWEEN '2015-01-26' AND '2016-09-24'
 AND
   DAY(dates.date) = 27

结果

| number of days |
|----------------|
|             20 |

请参见演示http://sqlfiddle.com/#!9/c61cdb/9号

相关问题