Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Расчет распределения временного интервала по 30-дневным месяцам / 12 сообщений из 12, страница 1 из 1
12.05.2020, 09:31
    #39956112
Xview
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Расчет распределения временного интервала по 30-дневным месяцам
Доброго дня всем.

Хотел бы спросить совета насчет одного решения.

Необходимо каким-то образом сделать год равным 360 дням, то есть длина каждого месяца должна быть равна 30 дням.
То есть февраль будет иметь 30 дней, все остальные месяцы тоже.

Соответственно, нужна функция, позволяющая определять интервальное количество дней расстояния в таких "днях" между двумя датами.

То есть, допустим, на входе имеются две даты ' 2020-2-28 ' и ' 2020-6-3 '.
Поскольку февраль, как и май теперь равны 30 дням, функция должна выдать следующее:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
| FIELD_YYYYMM  | FIELD_DAYS
-----------------------------
| 202002        |   1
| 202003        |   30
| 202004        |   30
| 202005        |   30
| 202006        |   3

Может, только через какую-то приготовленную таблицу с датами?
...
Рейтинг: 0 / 0
12.05.2020, 09:49
    #39956117
Ennor Tiegael
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Расчет распределения временного интервала по 30-дневным месяцам
Xview,

Не понятно, как поле FIELD_DAYS формируется. Но вообще, можете начать плясать вот от такого:
Код: sql
1.
2.
3.
declare @d date = '20200228';

select datepart(dayofyear, @d) / 30 + 1;

Только учтите, что последние 5-6 дней года окажутся в 13 месяце...
...
Рейтинг: 0 / 0
12.05.2020, 10:01
    #39956125
Xview
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Расчет распределения временного интервала по 30-дневным месяцам
Вы правы, в таблице результатов я немного ошибся.

FIELD_DAYS для расчета интервалов для конкретного примера '2020-2-28' и '2020-6-3' формируется так.

Берется дата начала интервала 2020-2-28. Поскольку теперь у нас в феврале 30 дней, то в расчет попадет 28, 29 и 30 февраля .
Далее март, апрель и май длиной в 30 дней каждый и далее три дня из июня.

Код: plaintext
1.
2.
3.
4.
5.
6.
| FIELD_YYYYMM  | FIELD_DAYS
-----------------------------
| 202002        |   3
| 202003        |   30
| 202004        |   30
| 202005        |   30
| 202006        |   3


Для интервала '2019-12-31' и '2020-6-3' должно быть так:
Поскольку у нас декабрь теперь имеет только 30 дней, то начальная дата меняется на 2019-12-30 .

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
| FIELD_YYYYMM  | FIELD_DAYS
-----------------------------
| 201912        |   1
| 202001        |   30
| 202002        |   30
| 202003        |   30
| 202004        |   30
| 202005        |   30
| 202006        |   3



автортолько учтите, что последние 5-6 дней года окажутся в 13 месяце.
Нет, месяцев должно быть 12, каждый по тридцать дней. Если начальный или конечный день попадает на 31 число, то автоматически считается, что это 30-е число.
...
Рейтинг: 0 / 0
12.05.2020, 16:56
    #39956377
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Расчет распределения временного интервала по 30-дневным месяцам
Xview,

Вроде бы просто - полным месяцам пишите 30, первый и последний вычисляйте отдельно. Если первый и последний совпадают - берите разницу.
...
Рейтинг: 0 / 0
12.05.2020, 16:59
    #39956378
a_voronin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Расчет распределения временного интервала по 30-дневным месяцам
Xview

Необходимо каким-то образом сделать год равным 360 дням, то есть длина каждого месяца должна быть равна 30 дням.


...
Рейтинг: 0 / 0
12.05.2020, 20:00
    #39956445
PizzaPizza
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Расчет распределения временного интервала по 30-дневным месяцам
Xview,
если у вас год не год, а ваши какие то тики , то и оперируйте не днями, а тиками - это чистая математика.

Судя по всему ваша задача не из реального мира и обрабатываемые данные не от людей приходят.
...
Рейтинг: 0 / 0
13.05.2020, 00:24
    #39956597
SIMPLicity_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Расчет распределения временного интервала по 30-дневным месяцам
Буржуины считают всё четрырёхнедельниками. Есть нюансы в первом четырёхнедельнике и в последнем. Именно так они считают бонусы и KPI , - по четырёхнедельным периодам. Но чтобы год резали кусками по 30 дней я не слышал...
...
Рейтинг: 0 / 0
13.05.2020, 08:03
    #39956645
a_voronin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Расчет распределения временного интервала по 30-дневным месяцам
SIMPLicity_
Буржуины считают всё четрырёхнедельниками.


Тут подойдет неделя ISO
...
Рейтинг: 0 / 0
13.05.2020, 10:37
    #39956679
SIMPLicity_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Расчет распределения временного интервала по 30-дневным месяцам
a_voronin,
да, вероятно. Но есть проблема с первой неделей - на стэковерфло муссировалась тема с SELECT DATEPART(isowk, '20141229'); - это число попало в первую неделю (уже следующего, как я понял, года).
...
Рейтинг: 0 / 0
13.05.2020, 11:39
    #39956721
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Расчет распределения временного интервала по 30-дневным месяцам
Может они с китайцами работают. А у них и колеса квадратные. Там мозги как у инопланетян.
...
Рейтинг: 0 / 0
13.05.2020, 19:12
    #39957081
uaggster
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Расчет распределения временного интервала по 30-дневным месяцам
SIMPLicity_
Буржуины считают всё четрырёхнедельниками. Есть нюансы в первом четырёхнедельнике и в последнем. Именно так они считают бонусы и KPI , - по четырёхнедельным периодам. Но чтобы год резали кусками по 30 дней я не слышал...

Расчетный период в Билайне.
...
Рейтинг: 0 / 0
13.05.2020, 21:19
    #39957128
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Расчет распределения временного интервала по 30-дневным месяцам
uaggster
SIMPLicity_
Буржуины считают всё четрырёхнедельниками. Есть нюансы в первом четырёхнедельнике и в последнем. Именно так они считают бонусы и KPI , - по четырёхнедельным периодам. Но чтобы год резали кусками по 30 дней я не слышал...

Расчетный период в Билайне.
По моему, либо Xview не осознал задачу и алгоритмы.
Или путает нас с названиями, т.е. что имеется в виду под "на входе имеются две даты '2020-2-28' и '2020-6-3'"?
Даты в реальном календаре, или это 28 число второго месяца этого собственного календаря?

PS Календарь для 360-дневного года с 12-тью 30 дневными месяцами.
Лучше его хранить как таблицу, и использовать в запросах.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
select DATEADD(d, (M-1) * 30 + D - 1, '20200101') as Date, M as Month, D as Day 
from (
	SELECT top 12 ROW_NUMBER() OVER (ORDER BY 1/0) as M FROM master..spt_values
) m
cross join (
	SELECT top 30 ROW_NUMBER() OVER (ORDER BY 1/0) as D FROM master..spt_values
) d
order by Date
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Расчет распределения временного интервала по 30-дневным месяцам / 12 сообщений из 12, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]