首页 > 解决方案 > Mysql,获取两个日期之间的数据,如果开始日期没有数据,我需要从最后输入的日期获取数据吗?

问题描述

我有一个包含以下条目的表

创建于
2020-01-05 300
2020-06-10 350
2020-09-15 400
2020-09-28 320

如果我尝试在 2020-02-01 到 2020-10-30 之间获取数据,我需要得到如下输出

创建于
2020-02-01 300
2020-03-01 300
2020-04-01 300
2020-05-01 300
2020-06-01 300
2020-06-10 350
2020-07-01 350
2020-08-01 350
2020-09-01 350
2020-09-15 400
2020-09-28 320
2020-10-01 320

标签: phpmysql

解决方案


MySQl 8您可以递归地生成丢失的记录。否则,需要一个临时表。

WITH RECURSIVE dates (created_at) AS (
  SELECT '2020-02-01' as created_at
  UNION ALL
  SELECT DATE_ADD(created_at, INTERVAL 1 MONTH)
  FROM dates WHERE created_at <= '2020-10-30'
), result_table AS (
  SELECT created_at, tax FROM taxes
  UNION 
  SELECT created_at, (
      SELECT tax FROM taxes t 
      WHERE t.created_at <= d.created_at 
      ORDER BY t.created_at DESC LIMIT 1
    ) AS tax
  FROM dates d
)   
SELECT * FROM result_table
WHERE created_at BETWEEN '2020-02-01' AND '2020-10-30'
ORDER BY 1

db<>小提琴


推荐阅读