powered by simpleCommunicator - 2.0.37     © 2025 Programmizd 02
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Помогите с запросом pro-rata, что не так?
5 сообщений из 5, страница 1 из 1
Помогите с запросом pro-rata, что не так?
    #39184346
kostas2016
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В приложении сама база (как пример)
Периоды времени, продолжительность , и стоимость аренды за период.
Для примера составлены всего 3 периода, в реальной таблице таких периодов за год будет много.
(для наглядности рубль в день ,и два рубля в день)

Смысл запроса, вычисление аренды pro-rata между произвольно заданными датами


start end duration rent

1/01/2016 00:00 31/01/2016 23:59 31 31
1/02/2016 00:00 15/02/2016 23:59 15 30
16/02/2016 00:00 25/02/2016 23:59 10 10


+++

Вот, собственно, сам запрос:

WITH RECURSIVE dates(date) AS (
VALUES({edbegdate})
UNION ALL
SELECT date(date, '+1 day')
FROM dates
WHERE date < {edenddate}
)

SELECT

"date",

TOTAL(
(
SELECT TOTAL(rent.rent / (julianday(rent."end") - julianday(rent."begin"))) FROM rent WHERE date("date", '+1 day') >= rent."begin" AND "date" < rent."end" END)
)
) as TotalResult

FROM dates

+++++++++++++++++++


Делаю тестовые запросы

1.01 - 10.01 - возвращает период 10 дней, аренду 10 , правильно

1.01 - 31.01 - возвращает период 31 день, но аренду 30, вместо 31

1.02 - 15.02 - возвращает период 15 дней , а аренду 28, вместо 30

1.01 - 25.02 - возвращает период 56 дней, а аренду 66,99 вместо 71

Пробовал разные комбинации, никак не могу понять , где ошибка

Или может pro-rata как-то по-другому нужно запрашивать?

Как в бухгалтерских программах делают, когда месяцы закрывают (там тоже пропорцию к концу месяца считают)?
...
Рейтинг: 0 / 0
Помогите с запросом pro-rata, что не так?
    #39184348
kostas2016
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Помогите с запросом pro-rata, что не так?
    #39184374
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
эээээ..... чего?
Как могут быть "произвольно заданные даты" если у тебя в базе уже четко заданные периоды?
Обещал три периода, а в базе в реальности всего два.
Так в чем у тебя проблема то? В ренте или в периоде?
"1.01 - 25.02" это что за период такой? От первого января, до второго числа двадцать пятого месяца? А это в каком календаре?

Читай тут: 13467826 . Обрати внимание на пункты 2, 3, 4 и особенно 5.
...
Рейтинг: 0 / 0
Помогите с запросом pro-rata, что не так?
    #39184783
kostas2016
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White Owlэээээ..... чего?
Как могут быть "произвольно заданные даты" если у тебя в базе уже четко заданные периоды?



В том-то и дело, что необходимо получить pro-rata значение.

White Owl"1.01 - 25.02" это что за период такой? От первого января, до второго числа двадцать пятого месяца? А это в каком календаре?


Это 01 Янв 2016 - 25 Фев 2016


Есть , чем помочь, помоги
...
Рейтинг: 0 / 0
Помогите с запросом pro-rata, что не так?
    #39185207
MrCat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброму мсью пихать свой рекурсивный запрос во все дыры - ну фу же.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
create table intervals(
  date_from real, -- julianday начала интервала
  date_to real,  -- julianday конца интервала
  cost_per_day real); -- плата за день (в звонких Золотых Коронах Соединённого Королества)
  
-- добрая пинта исходных данных
insert into intervals(date_from, date_to, cost_per_day)
values(julianday('2016-01-01'), julianday('2016-01-15'), 1.0);
insert into intervals(date_from, date_to, cost_per_day)
values(julianday('2016-01-16'), julianday('2016-01-31'), 2.0);
insert into intervals(date_from, date_to, cost_per_day)
values(julianday('2016-02-01'), julianday('2016-02-15'), 3.0);
commit;

-- параметризованный запрос, D0 и D1 - начало и окончание периода аренды
select 
  sum(
    cost_per_day * (min($D1, date_to) - max($D0, date_from) + 1)
  ) as total_cost
from intervals
where 
  date_from < $D1 and
  date_to > $D0;


*) Мнение автора может не совпадать с мнением булгахтера, аудтора, следователя и арестантов, "pro rata" ассоциируется у него с крысой.
*) Как обрабатывать пропуски в таблице? Например, первый интервал до 31 марта, а второй - с 3 апреля.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Помогите с запросом pro-rata, что не так?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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