Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MS SQL Server > Week to DateFirst and DateLast


Автор: uranpro 19.5.2009, 13:23
добрый день.

нужно написать запрос, который будет группировать записи по неделям(пн-начало, вс-конец), он должен отображать начало и конец недели.
нашел ф-ю Datepart, из нее я могу узнать номер недели, но начало и конец не могу.
подскажите плс.

пример:
11,05,2009  17,05,2009  поле3  поле4
18,05,2009  24,05,2009  поле3  поле4

Автор: Nord001 19.5.2009, 13:47
Ммммм, узнаёшь номер недели, потом сортируешь по  номеру недели и дате....первый понедельник последний воскресенье...

Автор: uranpro 19.5.2009, 13:54
Nord001, не все так просто. если выводить дату, то нужно будет по ней группировать, а мне надо 1 и последнюю только, а не все.
мб использовать мин макс...

Автор: Deniz 19.5.2009, 14:09
Код
DATEADD("day", -datepart(dw, ModifiedDate), ModifiedDate)
может как-то так?

Автор: Akina 19.5.2009, 14:10
Код

select min(date), max(date)
from table
group by weeknumber(date)

Автор: uranpro 19.5.2009, 14:28
не работает

Автор: Akina 19.5.2009, 17:59
 smile Да что ж за [censored] привычка - пока вытянешь клещами из автора все подробности, семь потов сойдёт...

Блин, кому надо решить проблему??? где структура таблицы, пример данных в ней, пример того, что надо получить именно из этих данных, где наконец расшифровка загадочного "не работает" и описание, на каком материале (данные, текст запроса) оно было получено?

Автор: uranpro 20.5.2009, 10:33
Akina, извини =)
подробно:
таблица1 Т1
tdate datetime
Qty int

T1:
01.02.2009 1 
02.02.2009 1 
03.02.2009 1 
04.02.2009 1 
05.02.2009 1 
06.02.2009 1 
07.02.2009 1 
09.02.2009 1 
16.02.2009 1 

нужно получить такой вид:
28.01.2009 03.02.2009 
04.02.2009 10.02.2009 
11.02.2009 17.02.2009 
18.02.2009 24.02.2009 

т.е.
[Дата первого дня недели] [Дата последнего дня недели] [Сумма по полю Qty за неделю]

Автор: Akina 20.5.2009, 10:46
Код

SELECT Min(T1.tdate) AS Mindate, Max(T1.tdate) AS Maxdate, Sum(T1.Qty) AS SumQty
FROM T1
GROUP BY DatePart(wk,T1.tdate);


Автор: uranpro 20.5.2009, 15:06
Akina, повторяю, не работает! выдает какую-то чушь, типа 01.01.2008 30.01.2009 Sum

Автор: Akina 20.5.2009, 15:15
uranpro, у меня работает, в ADP-проекте. А в чудеса я не верю.

Автор: uranpro 20.5.2009, 18:07
Akina, если будут такие даты 01,01,2008 и 01,01,2009, то мин и макс будет 01,01,2008 и 01,01,2009, т.е. неделя длится больше года!

сумма считается соответственно.

Автор: Akina 20.5.2009, 18:14
Цитата(uranpro @  20.5.2009,  19:07 Найти цитируемый пост)
если будут такие даты 01,01,2008 и 01,01,2009

А самому сообразить уже никак невозможно?
Код

SELECT Min(T1.tdate) AS Mindate, Max(T1.tdate) AS Maxdate, Sum(T1.Qty) AS SumQty
FROM T1
GROUP BY DatePart(yy,T1.tdate),DatePart(wk,T1.tdate);

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)