联接具有日期范围的表的最佳方法

时间:2019-02-19 15:36:12

标签: mysql date range

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

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的行。

这一切都很好,它确实运行很快,但是数据库正在大量增长,我敢肯定必须有一种更智能的方法来解决此问题,也许有一个静态的“ Days”表,每个表仅列出一行接下来的100年里每天都会发生......但我找不到有效的解决方案,因为我需要保持速度和“ days to date”(今天的天数)值。

我需要的结果就是这种

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

您有什么提示吗?

0 个答案:

没有答案