2017-08-20 53 views
1

我已通過R連接到SQL服務器並具有以下代碼。我想在Factsetdate的查詢之外創建一個參考(請參見下面的粗體)。這意味着從查詢中取出SELECT DATEADD....組件,並將其添加到名爲Date1的變量中。有沒有辦法做到這一點?由於查詢中的R和SQL引用

SQLCommandEOM<-data.frame(sqlQuery(myConn, 
"SELECT fc.[FactSet Fund Code], fc.FactsetDate, fc.[Asset Class], fc.[Fund Manager], 
d.Id AS DeskID, d.[Name] AS DeskName, fc.[% Factor Risk], fc.[Predicted Tracking Error], 
fc.[Portfolio Predicted Beta] 

FROM [PortfolioAnalytics].[Data_Factset].[FundChar] fc 
LEFT OUTER JOIN Data_Axioma.FactSetAccount fsa ON fc.FactsetAccountCode = REPLACE(fsa.Code, '_', '') 
LEFT OUTER JOIN dbo.Portfolio p ON fsa.PortfolioId = p.Id 
LEFT OUTER JOIN dbo.Mandate m ON p.UnderlyingId = m.id 
LEFT OUTER JOIN dbo.Desk d ON m.DeskId = d.Id 
WHERE IncludesCash = 1 
AND [FactSet Fund Code] IS NOT NULL 
AND [Fund Manager] IS NOT NULL 
AND [Asset Class] IS NOT NULL 
AND FactsetDate = **(SELECT DATEADD(d,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE()),0)))** 
          ORDER BY [Predicted Tracking Error] DESC")) 

回答

0

這是如何從R對象的字符串粘貼到一個SQL查詢R內部:

sql  <- paste("select * 
        from MyDB.dbo.DIM_Person s 
         where OppSFId in ('", 
         paste(sept$OppSFId,collapse = "','"),"')",sep = "") 
sept.person <- sqlQuery(db,sql) 

在我的特徵向量被稱爲sept$OppSFId

所以,如果我理解正確你的榜樣,你的性格向量將被稱爲Date1,你想用它替換在這樣的:

SQLCommandEOM <- data.frame(sqlQuery(myConn, paste('"SELECT fc.[FactSet Fund Code], fc.FactsetDate, fc.[Asset Class], fc.[Fund Manager], 
d.Id AS DeskID, d.[Name] AS DeskName, fc.[% Factor Risk], fc.[Predicted Tracking Error], 
fc.[Portfolio Predicted Beta] 

FROM [PortfolioAnalytics].[Data_Factset].[FundChar] fc 
LEFT OUTER JOIN Data_Axioma.FactSetAccount fsa ON fc.FactsetAccountCode = REPLACE(fsa.Code, '_', '') 
LEFT OUTER JOIN dbo.Portfolio p ON fsa.PortfolioId = p.Id 
LEFT OUTER JOIN dbo.Mandate m ON p.UnderlyingId = m.id 
LEFT OUTER JOIN dbo.Desk d ON m.DeskId = d.Id 
WHERE IncludesCash = 1 
AND [FactSet Fund Code] IS NOT NULL 
AND [Fund Manager] IS NOT NULL 
AND [Asset Class] IS NOT NULL 
AND FactsetDate =', Date1, 
'ORDER BY [Predicted Tracking Error] DESC"))')        
+0

嗨感謝您的迅速反應。我是一個新手,所以如果你可以使用我的例子(已經重新編輯它)會有所幫助。我基本上需要:**(SELECT DATEADD(d,-1,DATEADD(mm,DATEDIFF(m,0,GETDATE()),0)))**,與查詢並且引用一個更簡單的名稱,如DATE1。這個組件是我例子中代碼的第二行。非常感激。 – user8491385

+0

@ user8491385完成。在這個例子中,我假定'Date1'是一個單一的元素字符向量,即只有一個日期。如果它是一個日期列表,那麼你需要更像我的第一個例子。 –