mysql - 使用连接根据范围内的日期匹配表行

标签 mysql sql

我正在尝试将世界银行国家/地区的收入水平映射到数据集。收入水平每年都在变化,我需要使用交易的国家和日期将适当的收入水平映射到交易。

下表说明了布局和问题:

Example - Table 1                  Table 2
-----------------                  ----------------------------------------
|ISOCountryCode3, PODate       |   |CountryAlpha3, StartDate,  EndDate,    IncomeClass|
|CIV,            '2009-11-01'  |   | CIV,          1989-10-02, 1989-09-12,     lower  |
|ALB,            '2007-01-04'  |   | CIV,          2009-01-01, 2010-01-01,     lower  |  
                                   | CIV,          2010-01-02, 2011-01-01,     middle |

系统应该返回:

|CIV, '2009-11-01', lower|
|...

这是我到目前为止尝试过的 SQL

SELECT mergestandard.*,incomeclassifications.IncomeClass 
FROM `mergestandard`
LEFT OUTER JOIN  incomeclassifications 
ON mergestandard.ISOCountryCode3 = incomeclassifications.CountryAlpha3
AND mergestandard.PODate<=incomeclassifications.EndDate
AND mergestandard.PODate>=incomeclassifications.StartDate

不幸的是,系统一直在 incomeclass 字段中返回 null。任何帮助将不胜感激!

最佳答案

我通常不使用 mySql,但我会试试这个:

SELECT mergestandard.*,incomeclassifications.IncomeClass 
FROM `mergestandard`
LEFT OUTER JOIN  incomeclassifications 
ON mergestandard.ISOCountryCode3 = incomeclassifications.CountryAlpha3
WHERE
mergestandard.PODate<=incomeclassifications.EndDate
AND mergestandard.PODate>=incomeclassifications.StartDate

第一部分会给你

|CIV, '2009-11-01', lower|
|CIV, '2009-11-01', lower|
|CIV, '2009-11-01', middle|
|...

实际上还包括日期

|CIV, '2009-11-01', lower| 1989-10-02, 1989-09-12
|CIV, '2009-11-01', lower| 2009-01-01, 2010-01-01
|CIV, '2009-11-01', middle| 2010-01-02, 2011-01-01
|...

然后使用where子句过滤你想要的。

|CIV, '2009-11-01', lower| 2009-01-01, 2010-01-01

关于mysql - 使用连接根据范围内的日期匹配表行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18904347/

相关文章:

mysql - Subsonic 3.0.0.3 与 MySQL 4template 无法正常工作

mysql - 更改整数列的默认值

MySQL索引几乎不能加速简单查询

python - 查询在查询浏览器中运行良好,但在 python 代码中运行不佳

SQL 命名约定

mysql 过程创建表为 select (call(abc(xy)))

mysql - 使用 LOCATE 和 SUBSTRING 从 MySQL 返回特定文本

php - 如何将链接 (<a>) 中的一些信息(值)发送到另一个页面?

mysql - 使用 COUNT()、ORDER BY 和 WHERE user = ?同时地

mysql - 从查询中获取不平衡的行