2015-01-10 15 views
0

我正在嘗試執行一些我認爲在SQL中相當簡單的操作。我看過this solution,但我不認爲它與我正在尋找的完全一樣(因爲我沒有代碼欄)。我有一個表,看起來像這樣(還有其他列,但他們並不因素這個問題,所以我已經忽略他們爲了簡潔):SQL根據日期範圍在另一個表中找到日期落在表中的位置

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, ENDDATE]

例如,ID=0T1將有描述「沒有空間」,而ID=1將有描述「不是多餘的房間」的基礎上,T1日期。

編輯:我真的覺得我比這更難。是否如WHERE條款那樣簡單:

WHERE T1.DATE >= T2.STARTDATE and T1.DATE <= T2.ENDDATE 

回答

1

您是否正在尋找類似的查詢?

SELECT * 
FROM T1 
INNER JOIN t2 on t1.code = t.code and t1.date >= t2.startdate and t1.date <= t2.enddate 
... 
+0

是的,謝謝。我用那個確切的東西編輯了我原來的帖子,哈哈。我一整天都在盯着其他東西的文檔,真的是太複雜了。 – TheOriginalBMan

相關問題