|
|
|
нужен алгоритм расчета дней товара в аренде
|
|||
|---|---|---|---|
|
#18+
Суть проблемы: Сдаю я товар в аренду и заношу все операции в таблицу, состоящую из полей: "фирма", "товар", "движение", "дата" (в поле "движение" только два варианта - приход / уход). Задача - получить отчет за весь период учета, в котором отражается: сколько конкретный товар пробыл в аренде у конкретной фирмы. Один и тот же товар уходит в аренду и приходит из аренды по несколько раз. В таблице получается несколько записей по одному и тому же товару. Простое вычисление разницы по датам первой и последней записи по товару не работает, т.к. товар мог в этот промежуток мог повторно сдаваться в аренду. Посоветуйте, как правильно сформировать алгоритм расчета? Наверно такой расчет правильнее делать в запросе SQL? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2010, 17:01 |
|
||
|
нужен алгоритм расчета дней товара в аренде
|
|||
|---|---|---|---|
|
#18+
Макс375Суть проблемы: Сдаю я товар в аренду и заношу все операции в таблицу, состоящую из полей: "фирма", "товар", "движение", "дата" (в поле "движение" только два варианта - приход / уход).А как бы Вы сами назвали эту таблицу? Какие сущности там хранятся? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2010, 17:18 |
|
||
|
нужен алгоритм расчета дней товара в аренде
|
|||
|---|---|---|---|
|
#18+
Будем считать, что таблица "правильная", то есть нет двух подряд уходов или приходов и первым был уход для каждого товара. Тогда как-то так на псевдо-коде: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. С уважением, Naf ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2010, 17:31 |
|
||
|
нужен алгоритм расчета дней товара в аренде
|
|||
|---|---|---|---|
|
#18+
SELECT "товар", "фирма", SUM("дата_по"-"дата_с") "кол-во дней" FROM ( SELECT A1."товар", A1."фирма", A1."дата" "дата_с", COALESCE(MIN(A2."дата"), GETDATE()) "дата_по" FROM "аренда" A1 LEFT JOIN "аренда" A1 ON A1."фирма"=A2."фирма" AND A1."товар"=A2."товар" AND A1."дата"<A2."дата" AND A2."движение"='приход' WHERE A1."движение"='уход' GROUP BY A1."товар", A1."фирма", A1."дата" ) X GROUP BY "товар", "фирма" Как-то так... навскидку ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2010, 17:35 |
|
||
|
нужен алгоритм расчета дней товара в аренде
|
|||
|---|---|---|---|
|
#18+
Да, <= для дат будет правильнее ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2010, 17:39 |
|
||
|
нужен алгоритм расчета дней товара в аренде
|
|||
|---|---|---|---|
|
#18+
каланчаА как бы Вы сами назвали эту таблицу? Какие сущности там хранятся? Таблица называется "общая". Хранятся в таблице все записи по движению товара по складу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2010, 10:10 |
|
||
|
нужен алгоритм расчета дней товара в аренде
|
|||
|---|---|---|---|
|
#18+
NafТогда как-то так на псевдо-коде Простите неуча... А как вставлять "псевдокод" в Access? эту нужно делать в VB? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2010, 10:17 |
|
||
|
нужен алгоритм расчета дней товара в аренде
|
|||
|---|---|---|---|
|
#18+
Макс375NafТогда как-то так на псевдо-коде Простите неуча... А как вставлять "псевдокод" в Access? эту нужно делать в VB?Это значит, что надо адаптировать запрос под тот диалект SQL, который вы используете (Access). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2010, 10:23 |
|
||
|
нужен алгоритм расчета дней товара в аренде
|
|||
|---|---|---|---|
|
#18+
Уже где-то тут обсасывалось. Важный вопрос - краевые эффекты, раз речь идет о отчете за период. Например, как считать если начало аренды началось до начала периода ? Нужна функция получения дат начала и конца аренды в рамках указанного периода. Затем сложить все "концы дат" и вычесть сумму "начал дат". Дельта и будет длительностью аренды в днях. Естественно при отстутствии ошибок типо два начала или два конца подряд. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2010, 10:31 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=36571425&tid=1542763]: |
0ms |
get settings: |
7ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
162ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
| others: | 204ms |
| total: | 457ms |

| 0 / 0 |
