2012-04-05 2 views
1

Я хочу задать вопрос о еженедельном. Как рассчитать недельный permonth.For Например один месяц имеет 30 дней и 4 недели permonth. если я выберу вторую неделю в январе. он покажет количество еженедельных permonth и название месяца. Я хочу, чтобы результат показывал количество недельных (не всех недельных недель) в месяц и название месяца. Спасибо.Как рассчитать недельный permonth в студии данных aqua

Я хочу знать еженедельный расчет в месяц.

например. для январского месяца

1-7 days------------ 1 week 
8-14 days------------ 2 week 
15-21 days------------ 3 week 
22-28 days------------ 4 week 
29 days - other------- 5 week 

eg. за февраль месяц

1-7 days------------ 1 week 
8-14 days------------ 2 week 
15-21 days------------ 3 week 
22-28 days------------ 4 week 

и так далее.

ответ

0

Ваш вопрос довольно неясен (что еженедельно означает «еженедельно»?), И я не уверен, что я действительно это понимаю. Но я предполагаю, что на определенную дату вы хотите узнать, на какой неделе в этом месяце?

Если это так, самым простым решением является calendar table, в котором хранятся номер недели и любая другая полезная информация, необходимая для каждой даты в году. Вы можете заполнить его заранее за столько лет, сколько вам нравится, и тогда вы можете просто написать запрос так:

select WeekInTheMonth 
from dbo.Calendar 
where BaseDate = @SomeDate 

Если это не поможет, то вам нужно будет показать именно то, что входные параметры и выходные данные вы ожидаете увидеть.

Кстати, я полагаю, вы работаете с Aqua Data Studio в качестве клиента базы данных, но это не имеет никакого отношения к этому вопросу, поэтому вы можете редактировать заголовок.

2

Вы могли бы использовать эту группировку в запросе:

GROUP BY DATEADD(DAY, -(DAY(DateColumn) - 1) % 7, DateColumn) 

Следующая диаграмма показывает, как работает над выражением:

DateColumn DAY(DateColumn) DAY(…) - 1 (DAY(…)-1) % 7 DATEADD(…) 
---------- --------------- ---------- -------------- ---------- 
2012-04-01 1    0   0    2012-04-01 
2012-04-02 2    1   1    2012-04-01 
2012-04-03 3    2   2    2012-04-01 
2012-04-04 4    3   3    2012-04-01 
2012-04-05 5    4   4    2012-04-01 
2012-04-06 6    5   5    2012-04-01 
2012-04-07 7    6   6    2012-04-01 
2012-04-08 8    7   0    2012-04-08 
2012-04-09 9    8   1    2012-04-08 
…   …    …   …    … 
2012-04-13 13    12   5    2012-04-08 
2012-04-14 14    13   6    2012-04-08 
2012-04-15 15    14   0    2012-04-15 
…   …    …   …    … 
2012-04-21 21    20   6    2012-04-15 
2012-04-22 22    21   0    2012-04-22 
…   …    …   …    … 
2012-04-28 28    27   6    2012-04-22 
2012-04-29 29    28   0    2012-04-29 
2012-04-30 30    29   1    2012-04-29 
2012-05-01 1    0   0    2012-05-01 
2012-05-02 2    1   1    2012-05-01 
…   …    …   …    … 

Как вы можете видеть, результат есть начало недели (неделя в том смысле, который вы его определяете).

1

У меня уже есть ответ. Вы только что положили:

select * from customer((DATEPART(day, [date_field] - 1)/7 + 1 = :weeks) or (:weeks = ' ')) 
+0

Я попробовал эту формулу, но данные не такие же, как календарь. –

Смежные вопросы