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

Откуда:
Сообщений: 35
День добрый!
нужна помощь.

имеется таблица
dateschetchic
2011-08-01 12:00:00.000123
2011-08-01 15:00:00.000232
2011-08-01 18:00:00.000187
2011-08-03 11:00:00.000143
2011-08-03 13:00:00.000165
2011-08-05 19:00:00.000145

нужно посчитать среднее за день и сумму общего за месяц.
т.е. средне за 1-е августа 180
за 3 -е августа 154
и итого за месяц = 180+ 154+145 = 479

т.е. привести к виду:
dateschetchic
2011-08479

спасибо.
13 сен 11, 13:50    [11269182]     Ответить | Цитировать Сообщить модератору
 Re: сумма среднего значения  [new]
H2O2
Guest
ahmae,

select
  sum(t.sr) as sm
from(
select
  avg(t.schetchic) as sr
from
  tbl as t
group by
  convert(char(10), t.date, 104)
) as t
13 сен 11, 14:02    [11269288]     Ответить | Цитировать Сообщить модератору
 Re: сумма среднего значения  [new]
s.w.a.n.
Member

Откуда: Москва
Сообщений: 137
ahmae,
select convert(char(7),DD,121) MD,  sum(Xavg) SumAvg
from
(
select convert(char(10),dateX,121) DD, avg(schetchic) Xavg
from tab
group by convert(char(10),dateX,121)
) q
group by convert(char(7),DD,121)
13 сен 11, 14:10    [11269352]     Ответить | Цитировать Сообщить модератору
 Re: сумма среднего значения  [new]
iljy
Member

Откуда:
Сообщений: 8711
ahmae,

declare @t table(dt datetime, schetchik int)
insert @t values
('2011-08-01 12:00:00.000',	123),
('2011-08-01 15:00:00.000',	232),
('2011-08-01 18:00:00.000',	187),
('2011-08-03 11:00:00.000',	143),
('2011-08-03 13:00:00.000',	165),
('2011-08-05 19:00:00.000',	145)
	
select dateadd(MM, m, 0) m, DATEADD(dd, d,0) d, SUM(a)
from(
	select datediff(mm, 0,dt) m, DATEDIFF(d,0,dt) d, AVG(schetchik) a from @t
	group by datediff(mm, 0,dt), DATEDIFF(d,0,dt)
)t
group by m,d with rollup
13 сен 11, 14:11    [11269353]     Ответить | Цитировать Сообщить модератору
 Re: сумма среднего значения  [new]
ahmae
Member

Откуда:
Сообщений: 35
всем большое пасибо
еще был такой вопрос:
например у мня есть такая табл

dateschetchik
2011-08-01 00:00:00.000 123
2011-08-01 02:00:00.000134
2011-08-01 04:00:00.000 154
2011-08-01 06:00:00.000 156
2011-08-01 08:00:00.000 189
2011-08-01 10:00:00.000 145


т.е. например в 10:00 последняя запись, и надо добавить еще записи до 22:00 с предыдущим значением

т.е. привести его к виду
dateschetchik
2011-08-01 00:00:00.000 123
2011-08-01 02:00:00.000134
2011-08-01 04:00:00.000 154
2011-08-01 06:00:00.000 156
2011-08-01 08:00:00.000 189
2011-08-01 10:00:00.000 145
2011-08-01 12:00:00.000 145
2011-08-01 14:00:00.000 145
2011-08-01 16:00:00.000 145
2011-08-01 18:00:00.000 145
2011-08-01 20:00:00.000 145
2011-08-01 22:00:00.000 145
13 сен 11, 15:19    [11270000]     Ответить | Цитировать Сообщить модератору
 Re: сумма среднего значения  [new]
ZOOKABAKODER
Member

Откуда:
Сообщений: 178
Версия MSSQL какая?
Начиная с 10 можно так:
DECLARE @TBLLog TABLE
(	At DATETIME2(0) NOT NULL
,	Val INT NOT NULL)
;
INSERT @TBLLog 
VALUES
	('2011-08-01T12:00:00.000',	123),
	('2011-08-01T15:00:00.000',	232),
	('2011-08-01T18:00:00.000',	187),
	('2011-08-03T11:00:00.000',	143),
	('2011-08-03T13:00:00.000',	165),
	('2011-08-05T19:00:00.000',	145)
;
SELECT	*
FROM	@TBLLog
;
WITH CTEDays AS (
	SELECT	
		DayMy = CAST(t.At AS DATE)
	,	At_Max = MAX(t.At)
	FROM	@TBLLog t
	GROUP 
	BY	CAST(t.At AS DATE)
),	CTEFullLog AS (
	SELECT	
		Hh = DATEPART(Hh, d.At_Max)
	,	At = DATEADD(Hh, 1, d.At_Max)
	,	t.Val
	FROM	
		CTEDays AS d
	INNER JOIN
		@TBLLog AS t
	ON	t.At = d.At_Max
	UNION ALL
	SELECT	
		Hh = Hh + 1
	,	At = DATEADD(Hh, 1, At)
	,	Val
	FROM	CTEFullLog
	WHERE	Hh < 21
)
INSERT INTO	@TBLLog
(	At
,	Val)
SELECT
	At, Val
FROM
	CTEFullLog AS lF
ORDER 
BY	At
;
SELECT	*
FROM	@TBLLog
;

В предыдущих SQL, вместо CTEFullLog надо табличную переменную или временную таблицу (ну если меньше 8), а вместо CTEDays подзапрос.
13 сен 11, 17:13    [11271051]     Ответить | Цитировать Сообщить модератору
 Re: сумма среднего значения  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
ZOOKABAKODER,

CTE появились в 9-й версии.
А что делает ORDER BY в INSERTе?
13 сен 11, 17:23    [11271137]     Ответить | Цитировать Сообщить модератору
 Re: сумма среднего значения  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
iap
CTE появились в 9-й версии.
Наверно, Вы имели в виду тип DATE?
Я, значит, тормознул слегка
13 сен 11, 17:25    [11271149]     Ответить | Цитировать Сообщить модератору
 Re: сумма среднего значения  [new]
ZOOKABAKODER
Member

Откуда:
Сообщений: 178
iap
ZOOKABAKODER,CTE появились в 9-й версии.

Простите погорячился...

iap
ZOOKABAKODER,
А что делает ORDER BY в INSERTе?

То же, что и апендикс в нашем ЖКТ: как бы ничего, но когда этот INSERT ещё не эволюционировал из SELECT, этот ORDER помогал в дебаге. :)
13 сен 11, 17:27    [11271170]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить