2016-02-04 47 views
0

這是我操作的單個表的一個片段。該表格每天包含15個不同的符號,跨越3年(CurrDate)和大約370分鐘(PRMinute)。我正在嘗試一個查詢,它會顯示每個符號的最低值,每天顯示出發生低點的分鐘(PRMinute)。SQL Server - 按分鐘在分鐘內按分鐘查找最小值

Symbol CurrDate PRMinute PROpen PRHigh PRLow PRClose 
SLV  2013-07-09 1   18.55  18.56  18.55 18.555 
TLT  2013-07-09 1   107.45 107.45 107.45 107.45 
UCO  2013-07-09 1   34.10  34.10  34.10 34.10 
!COMP 2013-07-10 1   3502.11 3503.41 3502.00 3503.17 
!DJI 2013-07-10 1   15298.03 15315.86 15297.07 
!GSPC 2013-07-10 1   1651.56 1652.21 1651.56 1652.09 0 
!RUT 2013-07-10 1   1017.69 1017.87 1017.69 1017.87 0 

CREATE TABLE [dbo].[IntradayInput](
    [Symbol] [varchar](10) NULL, 
    [CurrDate] [date] NULL, 
    [PRMinute] [smallint] NULL, 
    [PROpen] [money] NULL, 
    [PRHigh] [money] NULL, 
    [PRLow] [money] NULL, 
    [PRClose] [money] NULL, 
    [PRVol] [bigint] NULL 
) ON [PRIMARY] 
+0

那麼,我們只是對'PRLow'列感興趣,而忽略其他'PRxxx'列嗎? –

+0

不會是一個簡單的聚合prminute工作? – TheGameiswar

+0

謝謝。最終,我想要最低的PRLow和每天最高的PRHigh。我只是要求上面的PRLow,因爲如果我得到的語法正確,我可能會弄清楚如何爲PRHigh做到這一點。 –

回答

1

在SQL Server這樣做的典型方法是使用row_number()

select ii.* 
from (select ii.*, 
      row_number() over (partition by symbol, currdate 
           order by prlow asc end) as seqnum 
     from IntradayInput ii 
    ) ii 
where seqnum = 1; 

這假定prlow包含在最低值的信息。沒有名爲value的列。

+0

非常感謝。這正是我想要的。現在我想知道如何爲PRHigh做些什麼。我不在乎它是2 SQL語句還是1來完成這兩個。再次感謝。 –

0

這與Gordon的答案類似,但不使用排名功能。

SELECT [Symbol], [CurrDate], MIN([PRLow]) AS Min_PRLow 
    , (SELECT MIN([PRMinute]) FROM [IntradayInput] mi 
     WHERE mi.[Symbol]=i.[Symbol] AND mi.[CurrDate]=i.[CurrDate] 
     AND mi.PRLow=MIN(i.[PRLow])) AS PRMinute 
    FROM [IntradayInput] i GROUP BY [Symbol],[CurrDate]