Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Помогите написать запрос  [new]
rsolanov
Member

Откуда:
Сообщений: 930
Имеется таблица
CREATE TABLE [dbo].[Orders](
	[id_Order] [int] IDENTITY(1,1)
	[id_Instrument] [int] NOT NULL,
	[id_Account] [int] NOT NULL,
	[id_TradeSession] [int] NOT NULL,
	[ORDERNO] [int] NOT NULL,
        [Date] [datetime] NOT NULL,
	[Price] [money] NULL,
	[LotCount] [int] NOT NULL,
	[BuySale] [bit] NOT NULL)

Есть промежуток времени @period int в днях. Помогите написать запрос, который выдаст для каждого интервала времени начиная с @datestart количество записей в интервале. Поле [Date] - дата-время заявки.
10 окт 13, 14:07    [14950651]     Ответить | Цитировать Сообщить модератору
 Re: Помогите написать запрос  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
rsolanov
Имеется таблица
CREATE TABLE [dbo].[Orders](
	[id_Order] [int] IDENTITY(1,1)
	[id_Instrument] [int] NOT NULL,
	[id_Account] [int] NOT NULL,
	[id_TradeSession] [int] NOT NULL,
	[ORDERNO] [int] NOT NULL,
        [Date] [datetime] NOT NULL,
	[Price] [money] NULL,
	[LotCount] [int] NOT NULL,
	[BuySale] [bit] NOT NULL)

Есть промежуток времени @period int в днях. Помогите написать запрос, который выдаст для каждого интервала времени начиная с @datestart количество записей в интервале. Поле [Date] - дата-время заявки.

a @datestart тип datetime?
10 окт 13, 14:53    [14951093]     Ответить | Цитировать Сообщить модератору
 Re: Помогите написать запрос  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
	SELECT COUNT(*) FROM Orders
		WHERE
			[Date] between @datestart AND DATEADD(d,@period,@datestart)
10 окт 13, 14:55    [14951120]     Ответить | Цитировать Сообщить модератору
 Re: Помогите написать запрос  [new]
LexusR
Member

Откуда: Novosibirsk
Сообщений: 1887
;with Periods (DateB,DateE) AS
(select @datestart as DateB,@datestart+@period-1 as DateE
union all
select DateE+1 as DateB,DateE+@period as DateE
from Periods
where exists(select * from [dbo].[Orders] t where t.date > DateE)
)
select p.DateB,p.DateE,COUNT(t.date)
from Periods p
left join [dbo].[Orders]  t on t.date between DateB and DateE
group by p.DateB,p.DateE
order by p.DateB,p.DateE
10 окт 13, 15:01    [14951181]     Ответить | Цитировать Сообщить модератору
 Re: Помогите написать запрос  [new]
Гость333
Member

Откуда:
Сообщений: 3683
WITH cte AS
(
   SELECT @datestart AS start, DATEADD(day, @period, @datestart) AS finish
   
   UNION ALL
   
   SELECT c.finish, DATEADD(day, @period, c.finish) AS finish
   FROM   cte c
   WHERE  c.finish < GETDATE()
)
SELECT c.start, c.finish, COUNT(o.id_Order) AS cnt
FROM   cte c
       LEFT JOIN dbo.Orders o ON o.Date >= c.start AND o.Date < c.Finish
GROUP BY c.start, c.finish
ORDER BY c.start
10 окт 13, 15:02    [14951186]     Ответить | Цитировать Сообщить модератору
 Re: Помогите написать запрос  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
А пля.. Для каждого промежутка, их много) пора в отпуск...
10 окт 13, 15:04    [14951215]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить