2012-02-07 32 views
1

我有一个运行良好的存储过程,它是一个选择查询。我想使用当前查询作为子查询来更改通过某些聚合返回的内容。目前的查询返回的数据为这样:SQL Server子查询帮助请吗? (希望使用现有的select查询作为子查询)

A 1/1/12 
A 1/2/12 
A 1/3/12 
B 2/1/12 
B 5/3/12 
B 5/5/12 

我想看到这是:

A 1/1/12 1/3/12 
B 2/1/12 5/5/12 

所以我想日期值的分钟,然后将日期值的最大值,每股票的符号。下面是我想和坚持当前的存储过程:

ALTER PROCEDURE dbo.sprocSymbsDatesForHistoricalPricingVol 

AS 

DECLARE @NxtAvailableDataDownloadDate date 

SET @NxtAvailableDataDownloadDate = dbo.NextAvailableDataDownloadDate() 

SELECT Symbol, TradingDate 
FROM (SELECT tblSymbolsMain.Symbol, tblTradingDays.TradingDate 
     FROM tblSymbolsMain CROSS JOIN 
     tblTradingDays 
     WHERE (tblTradingDays.TradingDate <= @NxtAvailableDataDownloadDate)) AS T1 
     WHERE (NOT EXISTS 
      (SELECT TradeDate, Symbol 
       FROM tblDailyPricingAndVol 
       WHERE (TradeDate = T1.TradingDate) AND (Symbol = T1.Symbol))) 
ORDER BY Symbol, TradingDate 

我尝试来包装选择查询作为子查询不工作...任何接受者?我相信这很简单。在此先感谢...

回答

2
SELECT Symbol, MIN(TradingDate), Max(TradingDate) 
FROM (
SELECT Symbol, TradingDate 
FROM (SELECT tblSymbolsMain.Symbol, tblTradingDays.TradingDate 
     FROM tblSymbolsMain CROSS JOIN 
     tblTradingDays 
     WHERE (tblTradingDays.TradingDate <= @NxtAvailableDataDownloadDate)) AS T1 
     WHERE (NOT EXISTS 
      (SELECT TradeDate, Symbol 
       FROM tblDailyPricingAndVol 
       WHERE (TradeDate = T1.TradingDate) AND (Symbol = T1.Symbol)))) t 
GROUP BY Symbol 
+0

那不只是给我整个数据集的最小值/最大值的日期,同样的每个记录,而不是最小/最大为实际的符号? (相关) – StatsViaCsh 2012-02-07 00:58:39

+0

+1。以大约三个字符和一个鼠标点击来击败我。 :) – 2012-02-07 00:58:42

+0

不,因为群组。当然,你可以尝试一下并找出答案。 :) – 2012-02-07 00:59:59

-2
create table TestTab(symbol char(1), date datetime) 


insert into TestTab values ('A','1/1/12') 
insert into TestTab values('A','1/2/12') 
insert into TestTab values('A','1/3/12') 
insert into TestTab values('B','2/1/12') 
insert into TestTab values('B','5/3/12') 
insert into TestTab values('B','5/5/12') 


select mi.symbol, mi.min_dt, ma.max_dt 
from 
(
    select symbol, min(date) min_dt 
    from TestTab 
    group by symbol 
) mi full outer join 
(

    select symbol, max(date) max_dt 
    from TestTab 
    group by symbol 
) ma on (mi.symbol = ma.symbol)