2012-07-01 91 views
2

我正在嘗試編寫一個查詢,其中每天從價格詳細信息表中獲取每個項目的最低和最高價格。T-sql每天獲取最小值和最大值

價格明細表價格每天設置多次,所以同一日期有很多記錄。所以我想要一個表格,每個日期有一行,然後將該表格連接到同一個表格,以便爲每個不同的日期我想要最小值和最大值。

USE [a_trading_system] 
GO 

/****** Object: Table [dbo].[price_details] Script Date: 07/01/2012 17:28:31 ******/ 
SET ANSI_NULLS ON 
GO 

SET QUOTED_IDENTIFIER ON 
GO 

SET ANSI_PADDING ON 
GO 

CREATE TABLE [dbo].[price_details](
    [price_id] [int] IDENTITY(1,1) NOT NULL, 
    [exch_ticker] [varchar](8) NOT NULL, 
    [price_set_date] [datetime] NOT NULL, 
    [buy_price] [decimal](7, 2) NOT NULL, 
    [sell_price] [decimal](7, 2) NOT NULL, 
CONSTRAINT [PK_price_detail] PRIMARY KEY CLUSTERED 
(
    [price_id] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 

GO 

SET ANSI_PADDING OFF 
GO 

ALTER TABLE [dbo].[price_details] WITH CHECK ADD CONSTRAINT [FK_price_details_Contract] FOREIGN KEY([exch_ticker]) 
REFERENCES [dbo].[Contract] ([exch_ticker]) 
GO 

ALTER TABLE [dbo].[price_details] CHECK CONSTRAINT [FK_price_details_Contract] 
GO 

SQL查詢

select distinct 
substring(convert(varchar(12),p1.price_set_date), 0, 12), 
p2.exch_ticker, 
(select MIN(buy_price) from price_details), 
(select MAX(buy_price) from price_details) 
from price_details as p1 

left join price_details as p2 on p2.exch_ticker = p1.exch_ticker 

where p1.exch_ticker = p2.exch_ticker 

group by p1.price_set_date, p2.exch_ticker 

摘要

表有許多價格在同一天成立。希望每個交易所股票的每日最小值和最大值。

感謝

回答

4

一個簡單group by應該工作:

select cast(price_set_date as date) as [Date] 
,  exch_ticker 
,  min(buy_price) as MinPrice 
,  max(buy_price) as MaxPrice 
from price_details as p 
group by 
     exch_ticker 
,  cast(price_set_date as date) 

不知道爲什麼你的榜樣查詢使用自連接。如果有充分的理由,請爲您的問題添加解釋。

+0

工作。謝謝。我的團隊錯了嗎? –

+0

您正在使用自連接,它會將N行變成N * N行。這可能是問題:) – Andomar

+0

我的問題是它顯示最小和最大但不是每個exch_ticker。不管怎麼說,還是要謝謝你 –

相關問題