mysql - 连接具有日期范围的表格的最佳方法
问题描述
我有一个非常简单的问题,但我找不到一个好的解决方案。
Table A:
ID_A DateStart DateEnd no_days
1 2019-02-01 2019-02-04 3
2 2019-02-04 2019-02-06 2
Table B:
ID_B ID_A Date DaysToDate
1 1 2019-02-01 10
2 1 2019-02-02 9
3 1 2019-02-03 8
4 2 2019-02-04 7
5 2 2019-02-05 6
所以我从表 A 开始,在创建了一条记录之后,我为表 B 创建了 N 行。
在我的项目中,我需要加入
select * from TableA join TableB using(ID_A)
为了列出所有日期,并带有自己的“到此日期的天数”值。我需要加入,因为我的用户可能正在搜索几天的范围,并且我需要知道此搜索涉及 TableB 的多少行。
这一切都很好,它工作得非常快,但是数据库正在增长很多,我相信必须有一种更智能的方法来解决这个问题,也许使用静态的“天”表,每天只列出一行接下来的 100 年……但我找不到可行的解决方案,因为我需要保持速度和“迄今为止的日期”值。
我需要的结果就是这种
select * from TableA join TableB using(ID_A) where DateStart between '2019-02-01' and '2019-02-05'
ID_A DateStart DateEnd no_days ID_B Date DaysToDate
1 2019-02-01 2019-02-04 3 1 1 2019-02-01 10
1 2019-02-01 2019-02-04 3 2 1 2019-02-02 9
1 2019-02-01 2019-02-04 3 3 1 2019-02-03 8
2 2019-02-04 2019-02-06 2 4 2 2019-02-04 7
你有什么提示吗?
解决方案
推荐阅读
- excel - 在 Excel 中创建新函数
- android - 更新 textview 数据 sqlite Android
- c# - 如何在asp.net mvc5中使用html生成pdf
- python - 如何在 python 中检查文件是否关闭?
- c++ - 搜索 .csv 文件并返回具有特定字符串 c++ 的所有行
- html - 导航栏菜单中的 HTML/CSS 下拉菜单
- excel - 列表框在vba用户表单中按日期时间排序/过滤?
- macos - 如何在 FreeBSD(和 macOS)中守护 shell 脚本
- oracle - 如何使用 Suitescript 2.0 登录网站?
- java - 如何在纳秒范围内找到 java 数学库函数的确切执行时间?