2016-05-16 42 views
-1

如果我有以下的數據庫結構:SQL上最近加入大於價值

TBL1

|id  | EYearMonth  | 
| 1  |  1617   | 
| 2  |  1618   | 
| 3  |  1619   | 
| 4  |  1620   |  
| 5  |  1621   | 
| 6  |  1622   | 
| 7  |  1623   | 
| 8  |  1624   | 
| 9  |  1625   | 
| 10  |  1626   | 
| 11  |  1627   | 
| 12  |  1628   | 

TBL2

|id  | Value   | Serial# 
| 1  |  1617   | 1068 
| 2  |  1618   | 1104 
| 3  |  1624   | 1215 

我真正想要的是什麼,是這樣的:

結果

|id  | EYearMonth  | Serial# 
| 1  |  1617   | 1068 
| 2  |  1618   | 1104 
| 3  |  1619   | 1104 
| 4  |  1620   | 1104 
| 5  |  1621   | 1104 
| 6  |  1622   | 1104 
| 7  |  1623   | 1104 
| 8  |  1624   | 1215 
| 9  |  1625   | 1215 
| 10  |  1626   | 1215 
| 11  |  1627   | 1215 
| 12  |  1628   | 1215 

如何製作此結果?請幫我

回答

0

您可以使用CROSS APPLYTOP此:

SELECT * 
FROM tbl1 t1 
CROSS APPLY(
    SELECT TOP 1 t2.[Serial#] 
    FROM tbl2 t2 
    WHERE t2.Value <= t1.EYearMonth 
    ORDER BY t2.Value DESC 
)t2 

ONLINE DEMO

+0

我認爲應該是'ORDER BY t2.value DESC',因爲不能保證連續出版物會遵循這個步驟:) – sagi

+0

@sagi,喲!再次感謝您保存我的**。必須是休息時間。 –

+0

我試過這段代碼,但在結果tbl中的Serial#Column的值等於1215 –

0

下面的查詢將工作:

SELECT 
    T1.id, 
    T1.EYearMonth, 
    T2.Serial# 
FROM tbl1 T1 
INNER JOIN Tbl2 T2 
    ON tbl1.EYearMonth = Tbl2.Value