首页 > 解决方案 > 连接具有日期范围的表格的最佳方法

问题描述

我有一个非常简单的问题,但我找不到一个好的解决方案。

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

你有什么提示吗?

标签: mysqldaterange

解决方案


推荐阅读