2014-02-26 67 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