Sql 复杂查询的输出列

Sql 复杂查询的输出列,sql,sql-server-2014,Sql,Sql Server 2014,我想问一下如何输出带有tickerID的列 截至目前,我有以下信息: select distinct mtime, avg(lastBid) Bid , avg(lastAsk) Ask from (Select a.mtime, a.IntradayTime, f.lastBid, f.lastAsk from (select cte.*,

我想问一下如何输出带有tickerID的列

截至目前,我有以下信息:

select distinct 
    mtime,  
    avg(lastBid) Bid ,
    avg(lastAsk) Ask 
from 
    (Select 
         a.mtime, a.IntradayTime, f.lastBid, f.lastAsk 
     from 
         (select 
              cte.*, 
              (select top 1 datetime 
               from IntradayHistory_1min.dbo.IntradayDataHistory' + @product + '_1min' + ' 
               where datetime <= cte.mtime 
                 and TickerID = ' + cast(@ticker as nvarchar(24)) + ' 
               order by datetime desc) as IntradayTime 
          from 
              cte) a 
    left join 
        Intradayhistory_1min.dbo.IntradayDataHistory'+ @product + '_1min' + ' f on f.datetime = a.IntradayTime and f.tickerid = ' + cast(@ticker as nvarchar(24)) + ') b 
group by 
    mtime 
order by 
    mtime 
option (maxrecursion 0)
我得到的错误是:

列“b.tickerid”在选择列表中无效,因为它既不包含在聚合函数中,也不包含在GROUP BY子句中


我发现解决方案是在ticker前面添加一个avg函数,如下所示:

select distinct mtime,
avg(ticker) tickerid
avg(lastBid) Bid ,
avg(lastAsk) Ask 

from ( Select a.mtime, a.IntradayTime, f.tickerid, f.lastBid, f.lastAsk 
from (select cte.*, (select top 1 datetime from IntradayHistory_1min.dbo.IntradayDataHistory' + @product + '_1min' + ' 
where datetime <= cte.mtime and TickerID = ' + cast(@ticker as nvarchar(24)) + ' order by datetime desc) as IntradayTime from cte ) a 
left join Intradayhistory_1min.dbo.IntradayDataHistory'+ @product + '_1min' + ' f 

on f.datetime = a.IntradayTime and f.tickerid = ' + cast(@ticker as nvarchar(24)) + ' ) b 
group by mtime order by mtime option (maxrecursion 0)

原因就在这里:

输出列的确切含义是什么?不清楚您想做什么-但我们可以看到,从逻辑上讲,tickerid也必须是@RBticker1变量中包含的任何内容,最简单的方法可能是选择它。如果您将tickerid添加到GROUP by子句中?按时间分组,按时间排序。。。您在问题中没有指定您需要在您的股票行情中输入平均值,您可能在寻找其他信息吗?取一个ID的平均值有什么意义?
select distinct mtime,
avg(ticker) tickerid
avg(lastBid) Bid ,
avg(lastAsk) Ask 

from ( Select a.mtime, a.IntradayTime, f.tickerid, f.lastBid, f.lastAsk 
from (select cte.*, (select top 1 datetime from IntradayHistory_1min.dbo.IntradayDataHistory' + @product + '_1min' + ' 
where datetime <= cte.mtime and TickerID = ' + cast(@ticker as nvarchar(24)) + ' order by datetime desc) as IntradayTime from cte ) a 
left join Intradayhistory_1min.dbo.IntradayDataHistory'+ @product + '_1min' + ' f 

on f.datetime = a.IntradayTime and f.tickerid = ' + cast(@ticker as nvarchar(24)) + ' ) b 
group by mtime order by mtime option (maxrecursion 0)