2017-07-25 54 views
0

我想問一下如何輸出一列與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) 

dbo.IntradayDataHistory_Rebar_1min的屏幕截圖(在這種情況下:鋼筋是@product):

enter image description here

更新了澄清:輸出看起來像這樣,

enter image description here

我曾嘗試以下過,沒有工作:

select distinct mtime, 
(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) 

的錯誤,我得到:

列「b.tickerid」無效在選擇列表中,因爲它是不包含在聚合函數或GROUP BY子句中。

+0

正是你的意思是什麼'輸出一列'? –

+0

不清楚你想要做什麼 - 但是我們可以看到,在邏輯上,'tickerid'也必須是'@ RBticker1'變量中包含的任何內容,最簡單的方法可能是選擇該變量。 –

+0

如果您將'tickerid'添加到GROUP BY子句中? 'group by mtime,tickerid order by ...' –

回答

0

我找到了解決的辦法就是真正在股票前面加一個平均的功能,所以如下:

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) 

背後的原因是在這裏:Column "invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause"

+0

你沒有在你的問題中指出你的代碼需要平均值,可能是你在尋找其他東西?平均身份證是什麼意思? – Hatik