我正在尝试编写一个查询,每天从价格明细表中获取每个商品的最低和最高价格。
在价格明细表中,每天设置多次价格,因此同一日期有很多记录。因此,我想要一个表,其中每个日期都有一行,然后将该表连接到同一张表,因此对于每个不同的日期,我都需要最小值和最大值。
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
概括
餐桌在同一天设定了许多价格。想要每个交易所报价的每天的最小值和最大值。
谢谢
一个简单的group by应该工作:
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)
不知道为什么您的示例查询使用的是自我联接。如果有充分的理由,请在您的问题中添加解释。