3

世界銀行の国の収入レベルをデータセットにマッピングしようとしています。収入レベルは年々変化するため、トランザクションの国と日付を使用して、適切な収入レベルをトランザクションにマッピングする必要があります。

次の表は、レイアウトと問題を示しています。

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 を返し続けます。どんな助けでも大歓迎です!

4

1 に答える 1

0

私は通常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
于 2013-09-19T20:40:50.627 に答える