php - 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 |
解决方案
在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
推荐阅读
- git - Flutter:获取最新的提交 sha
- image-processing - 在进行8位平面切片时,16的灰度值会落在平面数中吗?
- python - 数据框添加行没有正确返回
- c# - 获取项目库中的类列表 (C#)
- python - 我们可以在生产级别部署两个独立项目并将其连接在一起吗
- regex - 用于在变量字符串后提取数字的 REGEX 语句
- java - 来自 Android 的 RaspberryPi 调用
- typescript - “自定义地图”类型缺少“地图”类型的以下属性
' - macos - 终端是否可以使用 VPN 应用程序作为代理?
- azure-devops - 如何在 Azure DevOps 中压缩通用构建包?