Re: Скрипт для рассчета значения в пропорции (+)

Попробуйте так

SELECT
(SELECT car.carname FROM car WHERE id={cbGroups}) as car,
strftime('%d.%m.%Y', {edbegdate}) as begdate,
strftime('%d.%m.%Y', {edenddate}) as enddate,

SUM(
(
     SELECT SUM(rent.rent / (datediff(rent.`end`, rent.`begin`)+1)) FROM rent WHERE `selected_date` >= rent.`begin` AND `selected_date` <= rent.`end`
     AND (CASE WHEN {ComboBox1}=-1 THEN 1=1 ELSE rent.id_car={ComboBox1} END)
)
)

from

(select adddate('1970-01-01',t4.i*10000 + t3.i*1000 + t2.i*100 + t1.i*10 + t0.i) selected_date from
 (select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t0,
 (select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t1,
 (select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t2,
 (select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t3,
 (select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t4) v

where selected_date between {edbegdate} and {edenddate}
Dmitry.

27 (edited by vaskar 2016-02-11 09:51:02)

Re: Скрипт для рассчета значения в пропорции (+)

Дмитрий, спасибо за подсказку!

Подправил под MySQL, всё работает

Re: Скрипт для рассчета значения в пропорции (+)

Дмитрий, не могли бы вы в словах обьяснить, какие действия происходят в этой части запроса

SELECT SUM(rent.rent / (datediff(rent.`end`, rent.`begin`)+1))

Сумма столбца rent в пределах периода? Каким образом эти rent в столбце считаются?  Идет подсчет pro-rata или нет?

Re: Скрипт для рассчета значения в пропорции (+)

vaskar wrote:

Дмитрий, не могли бы вы в словах обьяснить, какие действия происходят в этой части запроса

SELECT SUM(rent.rent / (datediff(rent.`end`, rent.`begin`)+1))

Сумма столбца rent в пределах периода? Каким образом эти rent в столбце считаются?  Идет подсчет pro-rata или нет?

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

Dmitry.

Re: Скрипт для рассчета значения в пропорции (+)

DriveSoft wrote:

стоимость аренды делится на количество дней

За какой период берется стоимость аренды для вычичления?

Re: Скрипт для рассчета значения в пропорции (+)

Я честно говоря уже не помню ньюансы этого запроса.

Dmitry.

Re: Скрипт для рассчета значения в пропорции (+)

А какое ключевое слово нужно погуглить, чтобы почитать об этом запросе?

Re: Скрипт для рассчета значения в пропорции (+)

Сложно сказать, суть запроса в том, что он генерирует записи с датами от указанной даты до указанной даты, и для каждой такой записи вычисляется стоимость аренды в день, затем это все сумируется агрегатной функцией SUM

Dmitry.

Re: Скрипт для рассчета значения в пропорции (+)

Может вся проблема именно в генерации дат?   Стоит руками таблицу дат делать для про верки, или не тратить время зазря?

Re: Скрипт для рассчета значения в пропорции (+)

vaskar wrote:

Может вся проблема именно в генерации дат?   Стоит руками таблицу дат делать для про верки, или не тратить время зазря?

К сожалению не понял вопроса. Что то не работает?

Dmitry.

Re: Скрипт для рассчета значения в пропорции (+)

Вот привожу простой пример

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

результаты запросов:

        искомый период         duration          возвращает( должно быть)
01-02-2016    02-02-2016          2                      2  (4)
01-02-2016    03-02-2016          3                      4  (6)
01-02-2016    06-02-2016          6                    10  (12)
01-02-2016    15-02-2016         15                   28  (30)

В них наглядно видно, что не так

Re: Скрипт для рассчета значения в пропорции (+)

vaskar
Пожалуйста приложите проект.

Dmitry.

Re: Скрипт для рассчета значения в пропорции (+)

ПРиложено

Post's attachments

Attachment icon Proportion_fixed.zip 338.56 kb, 393 downloads since 2016-02-24 

Re: Скрипт для рассчета значения в пропорции (+)

Дмитрий, у вас не получилось посмотреть, что не так?   По моим наблюдениям сбоит в феврале и после февраля. Может високосный год виноват?

Re: Скрипт для рассчета значения в пропорции (+)

vaskar wrote:

Дмитрий, у вас не получилось посмотреть, что не так?   По моим наблюдениям сбоит в феврале и после февраля. Может високосный год виноват?

Не очень получается у меня решит эту задачу, т.е. не являюсь специалистом по SQL запросам, но попробуйте такой запрос

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"
     AND (CASE WHEN {ComboBox1}=-1 THEN 1=1 ELSE rent.id_car={ComboBox1} END)
     )
     ) as TotalResult

FROM dates

время не очень хорошо учитывается, только дата.
Также можете попросить помощи с запросом на специализированном форуме по SQLite
http://www.sql.ru/forum/sqlite

Dmitry.

Re: Скрипт для рассчета значения в пропорции (+)

Дмитрий , а вы можете помочь составить запрос, если в базе будет не автогенерация, а просто еще одна таблица со сгенерированными датами?