2014-02-26 69 views
0

我的目標是查找在幾個月內每天存儲的股票symbls(Cusips)。SQL Server - CTE - 在遞歸中相交

我有一個歷史表中的列作爲 historydate日期 符號CHAR(100)

我的目標是找出符號列表,可用每日期從第一天開始,我們應視爲2013-01-01。

對於每個日期,可能有1000個符號,並且想法是僅查找從2013-01-01到最後日期的股票代碼。

我試了下,但沒有奏效。

WITH asset_data_cte(cusip) 
    AS (SELECT DISTINCT cusip 
     FROM dbo.asset_data 
     WHERE t = '20130101' 
     UNION ALL 
     SELECT orig.cusip 
     FROM dbo.asset_data orig 
       INNER JOIN asset_data_cte adc 
         ON orig.cusip = adc.cusip 
         AND orig.t != adc.t) 
SELECT * 
FROM asset_data_cte 

這並沒有產生我真正想要的東西。不確定,回答我的問題的最佳方式。

回答

3

這是一個更簡單的查詢,可以實現這一點。它檢查在@startdate@enddate(含)之間的每個日期是否有記錄。它使用分組並檢查計數與日期之間的天數相同。

declare @startdate date, @enddate date 
set @startdate = '20140101' 
set @enddate = '20140103' 

select cusip 
from asset_data 
where t >= @startdate and t <= @enddate 
group by cusip 
having count(distinct t) = datediff(d, @startdate, @enddate) + 1 

SQL Fiddle demo