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 Query

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

Summary

Таблица имеет множество цен, установленных в тот же день. Хотите минимальные и максимальные значения для каждого дня для каждого тикера.

Спасибо

Ответы на вопрос(1)

Решение Вопроса

Просто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)

Не уверен, почему в вашем примере запроса используется самостоятельное соединение. Если есть веская причина, пожалуйста, добавьте пояснение к своему вопросу.

 nick gowdy01 июл. 2012 г., 18:38
Это сработало. Благодарю. Моя группа была не права?
 01 июл. 2012 г., 18:39
Вы использовали самостоятельное соединение, которое превращало бы N строк в N * N строк. Это могло быть проблемой :)
 nick gowdy01 июл. 2012 г., 18:47
Моя проблема заключалась в том, чтобы показать минимальное и максимальное значения, но не для каждого exch_ticker. Спасибо, в любом случае

Ваш ответ на вопрос