2016-07-28 3 views
-1

私は2つのデータセットを持っています。 Dataset1は、2つの変数NameDateを持っています。 Dataset1Name,Date2およびPriceである。SQL Server管理スタジオを使用して次のタスクを達成する方法

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がDataset1の各NameDateについては、次の

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 

のように見える、私は最新のものと同じnamepriceを見つけたいように見えます(latest) dataset1.name = dataset2.name and max(date1 |date1<= date)と等しいかそれより前のdate1です。

結果は次のようになります必要があります。

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 

誰がどのようにこれをしてくださいコードに私を教えることができます。 SQL Serverでの

答えて

2

、最も簡単な方法は、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

をすればよいですか? – 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 

これは、このコードは、日付1 <=日付に条件付き日付1最新のものと一致しますトリック

関連する問題