mysql - SQL 根据另一个表中的日期范围查找表中日期的位置

标签 mysql sql postgresql date

我正在尝试做一些我认为在 SQL 中相当简单的事情。我看过this solution ,但我认为它与我正在寻找的内容不太一样(因为我没有代码列)。我有一个看起来像这样的表(还有其他列,但它们没有考虑到这个问题,所以为了简洁起见,我省略了它们):

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 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 ,结束日期]

例如,T1 中的 ID=0 的描述为“没有空间”,而 ID=1 的描述为“没有额外空间” ",基于 T1 中的日期。

编辑:我真的认为我让这件事变得更加困难。它是否像 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
...

关于mysql - SQL 根据另一个表中的日期范围查找表中日期的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27880228/

相关文章:

sql - Postgresql UPDATE 基于先前 SELECT 的结果

PHP SQL Server 错误跟踪

python - 如何从 GCS 读取 json gzip 文件并写入表?

php - 每页只有一个 SQL 动态下拉菜单有效?

mysql - 处理 php 和 sql 中的新行

php - mysqli_fetch_assoc()期望参数1为mysqli_result,在第8行(目录)中给定的 bool 值

sql - 使用 Join 进行更新并选择最新值

postgresql - Openbravo 编译失败

postgresql - 使用 MyBatis 将 PostgreSQL 聚合返回到 HashMap

MySQL 返回应该为 Null 的值