2016-07-28 73 views
-1

我有兩個數據集。 Dataset1有兩個變量NameDateDataset1Name,Date2Price如何使用sql server management studio來實現以下任務

dataSet1的樣子以下

Name Date 
X1 2013-04-12 
X1 2013-05-12 
X1 2014-04-12 
X2 2012-06-11 
X2 2014-04-12 
X2 2015-05-01 
X3 2005-02-01 

Dataset2如下所示

Name Date1   price 
X1 2013-04-11  1.1 
X1 2013-05-12  2 
X1 2014-04-13  3 
X2 2012-06-13  2.2 
X2 2014-04-12  0.6 
X2 2016-05-01  0.5 

對於每個NameDateDataset1,我想找到同樣的name與最近的price (最新)date1等於或早於Datedataset1.name = dataset2.name and max(date1 |date1<= date)

結果應該是這樣的:

Name Date   Date1   price 
X1 2013-04-12 2013-04-11  1.1 
X1 2013-05-12 2013-05-12  2 
X1 2014-04-12 2013-05-12  2 
X2 2012-06-11 null   null 
X2 2014-04-12 2014-04-12  0.6 
X2 2015-05-01 2014-04-12  0.6 
X3 2005-02-01 null   null 

誰能教教我怎麼請編寫這一點。

回答

2

在SQL Server中,最簡單的方法是outer apply

select d1.*, d2.* 
from dataset1 d1 outer apply 
    (select top 1 d2.* 
     from dataset2 d2 
     where d2.name = d1.name and d2.date1 <= d1.date 
     order by d2.date1 desc 
    ) d2; 
+0

該代碼將匹配最新的日期1在日期1 <=日期的條件? – fly36

+0

d.name和d.date不應該是d1.name和d1.date嗎? – CodyMR

+0

@ Cody360c。 。 。謝謝。 –

0
SELECT TOP 1 [price] 
FROM Dataset1 
INNER JOIN Dataset2 ON Dataset1.[Name]=Dataset2.[Name] 
WHERE [Date1] <= Date 
ORDER BY Date1 DESC 

這應該做的伎倆

相關問題