2016-06-01 55 views
2

加入我有两个表: 1-设置SQL SELECT两者之间由日期

EffectiveDate ||  Value 
============================== 
'2000-01-01' ||  2 
'2005-01-01' ||  4 
'2010-01-01' ||  6 

2- DataTable中

 ID  || RecordDate 
=============================== 
     1  || '2001-01-01' 
     2  || '2002-01-01' 
     3  || '2003-01-01' 
     4  || '2007-01-01' 
     5  || '2008-01-01' 
     6  || '2011-01-01' 
     7  || '2013-01-01' 
     8  || '2014-01-01' 

这两个表之间的关系是,从EffectiveDateSettings most be smaller(and/or equal) than RecordDateDataTable但必须是最新的。 例如其结果必然是这样的:

 ID  || RecordDate || value 
======================================== 
     1  || '2001-01-01' || 2 
     2  || '2002-01-01' || 2 
     3  || '2003-01-01' || 2 
     4  || '2007-01-01' || 4 
     5  || '2008-01-01' || 4 
     6  || '2011-01-01' || 6 
     7  || '2013-01-01' || 6 
     8  || '2014-01-01' || 6 

感谢您的帮助:d

回答

3

您可以使用CROSS APPLYTOP以达到预期的效果:

SELECT 
    dt.ID, dt.RecordDate, x.Value 
FROM DataTable dt 
CROSS APPLY(
    SELECT TOP 1 Value 
    FROM Settings s 
    WHERE s.EffectiveDate <= dt.RecordDate 
    ORDER BY s.EffectiveDate DESC 
) x 

ONLINE DEMO

+0

哇!工作! 非常感谢您的回答,信息和在线演示! –