SQL 根据另一个 Table 中的日期范围查找 Table 中的日期
SQL Find Where Date Falls in Table Based on Date Range in Another Table
我正在尝试做一些我认为在 SQL 中相当简单的事情。我查看了 this solution,但我认为它与我正在寻找的不完全相同(因为我没有代码列)。我有一个 table 看起来像这样(还有其他列,但它们没有考虑到这个问题,所以为了简洁我省略了它们):
TABLE T1
ID | CODE | DATE | ...
------------------------------------------
0 | A1 | 2013-01-17 00:00:00 | ...
1 | A1 | 2014-02-01 00:00:00 | ...
2 | B5 | 2014-06-30 00:00:00 | ...
3 | C1 | 2013-12-01 00:00:00 | ...
4 | B5 | 2012-04-20 00:00:00 | ...
然后在一个单独的 table 中,我有关于这些代码的信息,如下所示:
TABLE T2
STARTDATE | ENDDATE | CODE | DESCRIPTION | ...
--------------------------------------------------------------------------
2012-01-01 00:00:00 | 2013-05-17 00:00:00 | A1 | No room | ...
2013-05-17 00:00:00 | 2014-12-31 00:00:00 | A1 | Not extra room | ...
2011-02-12 00:00:00 | 2013-12-31 00:00:00 | B5 | Lights | ...
2014-01-01 00:00:00 | 2014-08-11 00:00:00 | B5 | Lights (dim) | ...
基本上,T1
中的每个代码都会与 T2
中的代码相匹配,但该代码的描述会根据日期发生变化。所以我遇到的麻烦是在 T2
中找到与 T1
中的代码相对应的描述,但它需要在正确的范围内 [STARTDATE, ENDDATE]
。
例如,T1
中的 ID=0
的描述为 "No room",而 ID=1
的描述为 "Not extra room",基于 [=16] 中的日期=].
编辑: 我真的认为我让这变得比它必须的更困难。它是否像在 WHERE
子句中一样简单,例如:
WHERE T1.DATE >= T2.STARTDATE and T1.DATE <= T2.ENDDATE
您正在寻找这样的查询吗?
SELECT *
FROM T1
INNER JOIN t2 on t1.code = t.code and t1.date >= t2.startdate and t1.date <= t2.enddate
...
我正在尝试做一些我认为在 SQL 中相当简单的事情。我查看了 this solution,但我认为它与我正在寻找的不完全相同(因为我没有代码列)。我有一个 table 看起来像这样(还有其他列,但它们没有考虑到这个问题,所以为了简洁我省略了它们):
TABLE T1
ID | CODE | DATE | ...
------------------------------------------
0 | A1 | 2013-01-17 00:00:00 | ...
1 | A1 | 2014-02-01 00:00:00 | ...
2 | B5 | 2014-06-30 00:00:00 | ...
3 | C1 | 2013-12-01 00:00:00 | ...
4 | B5 | 2012-04-20 00:00:00 | ...
然后在一个单独的 table 中,我有关于这些代码的信息,如下所示:
TABLE T2
STARTDATE | ENDDATE | CODE | DESCRIPTION | ...
--------------------------------------------------------------------------
2012-01-01 00:00:00 | 2013-05-17 00:00:00 | A1 | No room | ...
2013-05-17 00:00:00 | 2014-12-31 00:00:00 | A1 | Not extra room | ...
2011-02-12 00:00:00 | 2013-12-31 00:00:00 | B5 | Lights | ...
2014-01-01 00:00:00 | 2014-08-11 00:00:00 | B5 | Lights (dim) | ...
基本上,T1
中的每个代码都会与 T2
中的代码相匹配,但该代码的描述会根据日期发生变化。所以我遇到的麻烦是在 T2
中找到与 T1
中的代码相对应的描述,但它需要在正确的范围内 [STARTDATE, ENDDATE]
。
例如,T1
中的 ID=0
的描述为 "No room",而 ID=1
的描述为 "Not extra room",基于 [=16] 中的日期=].
编辑: 我真的认为我让这变得比它必须的更困难。它是否像在 WHERE
子句中一样简单,例如:
WHERE T1.DATE >= T2.STARTDATE and T1.DATE <= T2.ENDDATE
您正在寻找这样的查询吗?
SELECT *
FROM T1
INNER JOIN t2 on t1.code = t.code and t1.date >= t2.startdate and t1.date <= t2.enddate
...