Member 11494685 Ответов: 1

Недельные мудрые данные из SQL.


Привет,

У меня есть такие данные, как

date		count
-----------------------
2016-01-01 	1
2016-01-02	1
2016-01-03	2
2016-01-04	1
2016-01-05	3
2016-01-06	4
2016-01-07	2
2016-01-08	5
2016-01-09	1
2016-01-10	2
2016-01-11	2
2016-01-12	1
2016-01-13	3


мне нужны данные за неделю, и на 1-ю неделю мне нужны данные за 1-ю неделю, на 2-ю неделю мне нужны данные за 1-ю Неделю + 2-ю неделю и на 3-ю неделю мне нужны данные за 1-ю Неделю + 2-ю Неделю + 3-ю неделю

неделя мудрая (с понедельника по воскресенье)

Мне нужен вывод, как показано ниже:
date 	 |  2016-01-01	|    2016-01-04	  |  2016-01-11	
count	  | 4 |	22 |	28

OriginalGriff

И что?
Что вы пробовали?
Где ты застрял?
Какая помощь вам нужна?

CHill60

Ваше заявление о требованиях не соответствует ожидаемому результату - слова говорят, что вы хотите кумулятивные суммы, но результат показывает сумму подсчета за каждую неделю

Member 11494685

1-я неделя января - это 2016-01-01 - 2016-01-03 - сумма = 4.
Точно так же 2-я неделя - это 2016-01-04-2016-01-10 - здесь мне нужны данные 1-й недели и сумма данных 2-й недели = 22

CHill60

И вы хотите, чтобы он был в одном ряду?
2016-01-01 | 2016-01-04 | 2016-01-11
4 | 22 | 28
или вы хотите его как
2016-01-01 | 4
2016-01-04 | 22
2016-01-11 | 28

Maciej Los

Честно говоря, чтобы получить первый, нужен второй результирующий набор. Извините за мое загадочное объяснение ;)
Пожалуйста, посмотри мой ответ, Кэролайн.

CHill60

Да, я понимаю, что ты имеешь в виду. :-) Я пытался выйти из операции независимо от того, требуется ли этот поворот или нет.

Member 11494685

Спасибо.

Maciej Los

Всегда пожалуйста.

Member 11494685

не могли бы вы, пожалуйста, ответить на этот вопрос?

http://www.codeproject.com/Questions/1108139/Hi-I-need-to-get-group-by-week-data-If-data-not-pr

1 Ответов

Рейтинг:
10

Maciej Los

Все, что вам нужно сделать, это создать запрос под названием "running sum", "running totals" и т. д.

Проверить это:
Вычисление простых текущих итогов в SQL Server[^]
SQL-сервер - как найти накопительный итог на SQL сервере - путь к власти SQL с пинал Дэйв[^]

Затем вы должны свернуть данные. Вот и все!

Попробуй:

DECLARE @tmp TABLE(adate DATE, acount INT)

INSERT INTO @tmp(adate, acount)
VALUES('2016-01-01', 1),
('2016-01-02', 1),
('2016-01-03', 2),
('2016-01-04', 1),
('2016-01-05', 3),
('2016-01-06', 4),
('2016-01-07', 2),
('2016-01-08', 5),
('2016-01-09', 1),
('2016-01-10', 2),
('2016-01-11', 2),
('2016-01-12', 1),
('2016-01-13', 3)

SET DATEFIRST 1;
SELECT [1], [2], [3]
FROM (
	SELECT a.weekno, 
			(SELECT SUM(acount) AS runningsum
			FROM @tmp AS b
			WHERE DATEPART(wk, adate) <= a.weekno) AS RunningSum
	FROM (
		SELECT adate, acount, DATEPART(wk, adate) AS weekno
		FROM @tmp 
		) AS a
	GROUP BY a.weekno
) AS DT
PIVOT (SUM(runningsum) FOR weekno IN ([1], [2], [3])) AS pt 


Результат:
1	2	3
4	22	28


0x01AA

Слишком много для моего маленького мозга. А 5. Бруно

Maciej Los

- Спасибо, Бруно. Не будьте так критичны к себе. Ты очень умный человек.
Твое Здоровье, Мацей

jaket-cp

гений +5
но не знаю что SET DATEFIRST 1; это для :)

Maciej Los

Прокомментируйте эту строку с помощью -- (двойной дефис) чтобы узнать, что происходит ;)
С другой стороны, проверьте Документация MSDN.
Спасибо.

CHill60

Не могу устоять :-) Текст песни The MAMAS AND the PAPAS-понедельник, Понедельник[^]
(5'd кстати)

Maciej Los

Спасибо, Кэролайн. И спасибо, что напомнили мне об этой замечательной группе.
Моя точка зрения о понедельниках: каждый понедельник напоминает мне, что еще одна неделя только началась...