0 / 0 / 0
Регистрация: 27.11.2012
Сообщений: 10
|
|
1 | |
Подсчитать количество дней, которое машина простояла в определенном месяце27.11.2012, 18:09. Показов 5096. Ответов 31
Метки нет (Все метки)
Начнем сначала . Опыт работы в МС Аксес у меня довольно скуден, и, как любой новичок, взялся за проектирование, надеясь не встретить на своем пути подводных камней, которые появились именно в том месте, где их меньше всего ожидалось.
Суть проблемы - есть база данных стоянки автомобилей, в ней, кроме всего прочего указаны дата приезда и дата отъезда . Нужно подсчитать количество дней, которое машина простояла именно в этом месяце . То-есть, если она стояла с середины прошлого месяца до середины этого, в отдельных отчетах по месяцам должно выдать ~ по 15 дней . Буду крайне благодарен за помощь )
0
|
27.11.2012, 18:09 | |
Ответы с готовыми решениями:
31
Определить полугодие, на которое приходится месяц с номером m и количество дней в том месяце Множества.Месяц 1..30 Описать функцию число дней (m), определяющую количество дней в месяце (n) не високосного года. Количество дней в месяце Количество дней в месяце |
0 / 0 / 0
Регистрация: 27.11.2012
Сообщений: 10
|
|
27.11.2012, 18:16 [ТС] | 2 |
количество дней, при этом всем подсчитывается корректно (то-есть [дата отъезда] - [дата приезда]) .
как вариант, думал рассмотреть следующим образом - создать отдельную таблицу, в которую макрос будет добавлять значение сегодняшней даты в отдельном поле, если машина не уехала (соответствующая галочка не проставлена) - а потом сделать подсчет по отфильтрованным данным, - количество записей, которые соответствуют определенному месяцу . Или создать отдельный запрос, в котором по условию будет меняться дата на первое число данного месяца, если она попадает на предыдущий месяц . Идеи решения проблемы есть, но вот с реализацией туговато, т.к. .
0
|
26815 / 14494 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
|
||||||
27.11.2012, 18:53 | 3 | |||||
Попробуйте запрос
2
|
3544 / 1118 / 94
Регистрация: 13.03.2011
Сообщений: 1,513
|
||||||
27.11.2012, 20:37 | 4 | |||||
Liberty_One, посмотрите такой вариант
Если машина на момент расчета не уехала, то предполагается, что поле ДатаОтъезда исходной таблицы Tab не заполнено (имеет значение Null) и в качестве даты отъезда берется текущая дата.
1
|
0 / 0 / 0
Регистрация: 27.11.2012
Сообщений: 10
|
|
28.11.2012, 12:15 [ТС] | 5 |
mobile, minob
Ребята, премного благодарен ! не знаю, что бы я без вас делал )
0
|
0 / 0 / 0
Регистрация: 27.11.2012
Сообщений: 10
|
|
02.12.2012, 02:06 [ТС] | 6 |
возможно нарушу правила, но есть еще один вопрос по той же базе .
Добавилась таблица "Стояли в боксе" - дата, когда поставили в бокс, дата когда из бокса убрали. Связана по коду с основной таблицей . Нужно подсчитать, сколько дней в сумме простояла машина в боксе, и отнять это число от количества всех дней в месяце . В боксе одна и та же машина может стоять несколько раз за весь период простоя . Буду благодарен за помощь )
0
|
26815 / 14494 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
|
||||||
02.12.2012, 04:34 | 7 | |||||
Если одно стояние в боксе не переходит из месяца в месяц, т.е. нет такого, чтобы поставили в одном месяце, а забрали в другом, то пригоден простой запрос на сумму разностей дат
1
|
3544 / 1118 / 94
Регистрация: 13.03.2011
Сообщений: 1,513
|
||||||
02.12.2012, 08:23 | 8 | |||||
Liberty_One, вижу в моем варианте запроса вы не разобрались (да и, как мне кажется, свою задачу не до конца прочувствовали), т.к. в ином случае такого бы вопроса не было. Заменив в запросе ДатаПриезда, ДатаОтъезда, КолДней, Tab, соответственно на Поставили, Забрали, КолДнейВБоксе, СтоялиВБоксе, получите решение вашей задачи, в котором, кстати, учитываются случаи, когда машину ставят в одном месяце, а забирают в другом.
Чтобы найти разность количества дней месяца и количества дней простоя добавьте в SELECT поле
1
|
0 / 0 / 0
Регистрация: 27.11.2012
Сообщений: 10
|
|
02.12.2012, 12:37 [ТС] | 9 |
дело в том, что оплата идет за ночь стоянки . Если в тот же день ее забрали из бокса - значит она там, по сути, и вовсе не стояла )
честно говоря, вы полностью правы ) Дело в том, что машины, стоявшие в боксе не оплачиваются, поэтому нужно, чтобы количество всех дней, которые конкретная машина простояла в боксе было исключено из общего количества дней в месяце . Действительно, сразу не обратил на это внимания . Спасибо )
0
|
3544 / 1118 / 94
Регистрация: 13.03.2011
Сообщений: 1,513
|
|
02.12.2012, 13:23 | 10 |
Не понял.
Возможно, вы хотели сказать: машины, стоявшие в боксе не оплачиваются, поэтому нужно, чтобы количество всех дней, которые конкретная машина простояла в боксе было исключено из общего количества дней, которые машина числилась на стоянке?
1
|
0 / 0 / 0
Регистрация: 27.11.2012
Сообщений: 10
|
|
02.12.2012, 13:43 [ТС] | 11 |
0
|
3544 / 1118 / 94
Регистрация: 13.03.2011
Сообщений: 1,513
|
|
02.12.2012, 14:17 | 12 |
Тогда по моему запросу разность вы получите неверно, т.к. я буквально воспринял ваше
а не как "количества всех дней стоянки в месяце" Но это все поправимо. Следовательно задача такая: В заданном месяце для каждого автомобиля определяем: а) количество дней (ds) стоянки (кстати по формуле с +1 или без?); б) количество дней (db), проведенное в боксе; в) количество оплачиваемых дней (ds-db). Продумайте, как расчитываются дни в п. а) и б), так как иогут возникнуть непонятки. Например, автомобиль поставили в бокс 30.11.2012, а забрали 01.12.2012. Если считать без разбивки по месяцам, то он находился в боксе 1 день. Если же считать с разбивкой по месяцам, то в ноябре он находился в боксе с 30.11.2012 по 30.11.2012, т.е. 0 дней, в декабре с 01.12.2012 по 01.12.2012, тоже 0 дней. В конечном итоге, оплачивающий стоянку может возмутиться. Перестраховочный вопрос: интервал времени нахождения в боксе принадлежит интервалу времени стоянки?
0
|
0 / 0 / 0
Регистрация: 27.11.2012
Сообщений: 10
|
|
02.12.2012, 16:38 [ТС] | 13 |
0
|
3544 / 1118 / 94
Регистрация: 13.03.2011
Сообщений: 1,513
|
||||||
02.12.2012, 18:35 | 14 | |||||
Liberty_One, вы не ответили на вопросы:
а) Т.е. к разности дат (ДатаОтъезда-ДатаПриезда) нужно добавлять 1 или нет? б)
Сообщение от minob
Добавлено через 1 час 3 минуты Liberty_One, извините, я понял, вам позарез нужен хоть какой-нибудь запрос, а тут я со своими вопросами. Вот запрос. Надеюсь проблемы, которые возникнут при его эксплуатации, вам удастся решить самостоятельно.
1
|
0 / 0 / 0
Регистрация: 27.11.2012
Сообщений: 10
|
|
03.12.2012, 00:07 [ТС] | 15 |
minob,
а) добавлять к разности +1 не нужно, успешно убрал ) б) интервал нахождения в боксе принадлежит интервалу времени стоянки в) интересный момент, не обратил сразу на него внимания . Наверное, следует определять количество дней проведенных в боксе без разбивки по месяцам . Кстати, скорее возмутится хозяин стоянки, когда ему денег не заплатят ) п.с. прошу прощения за задержку с ответом, я вам искренне признателен за уделенное для меня время и старания разобраться в моей проблеме ) п.п.с. Можно ли как-то забить поля "КолДнейОплаты" значениями из "КолДнейСтоянки" ? Даже для тех, которые в боксе не стояли ?
0
|
0 / 0 / 0
Регистрация: 28.11.2012
Сообщений: 7
|
|
17.12.2012, 20:03 | 16 |
Извините, что влезаю в Вашу тему. Но у меня тоже проблемы с вычислением разницы в датах. Но у меня проблема в том что даты у меня записаны в одном столбце и нужно вычислить разницу дат n-строчки с n+1 строчки. Массив строк очень велик и привязаться к какому то значению даты нельзя и перевернуть, так что бы даты были в столбцах, массив нельзя. Подскажите как выйти из этой ситуации.
0
|
3544 / 1118 / 94
Регистрация: 13.03.2011
Сообщений: 1,513
|
||||||
17.12.2012, 21:43 | 17 | |||||
В предположении, что поле с датой уникально и сортировка по полю с датой по убыванию даст требуемый в ТЗ порядок следования записей, можно воспользоваться таким запросом
0
|
0 / 0 / 0
Регистрация: 28.11.2012
Сообщений: 7
|
|
18.12.2012, 16:34 | 18 |
Спасибо за ответ, но мне слегка не подходит. Мне нужно именно сравнение n строчки со следующей. Упорядочить в большую или меньшую сторону нельзя.
0
|
3544 / 1118 / 94
Регистрация: 13.03.2011
Сообщений: 1,513
|
|
18.12.2012, 17:50 | 19 |
Таблица - куча записей. Поэтому для того, чтобы сказать, что некоторая запись предшествует другой, необходимо записи упорядочить, что достигается сортировкой записей ORDER BY.
Поэтому возникает вопрос, есть ли у вас в таблице уникальное поле, например, первичный ключ, или несколько полей дающих в совокупности уникальность, отсортировав по которым получим требуемую последовательность? Если таковых нет, то с помощью запроса (ИМХО) нельзя определить какая запись следует за другой или предшествует другой. В таком случае, полагаясь на удачу, можно в VBA открыть рекордсет, источником данных, которого будет таблица, и проходя по его записям определять разность. Но нет никакой гарантии, что записи будут следовать в нужном порядке. Судя по вашему ответу можно сделать вывод, что разность дат у вас может быть, как положительная, так и отрицательная, а может и 0. Так ли это? Наверное под упорядочиванием в большую сторону вы имели ввиду упорядочивание по возрастанию, а в меньшую - по убыванию? А вообще-то, чтобы не гадать на кофейной гуще, выложили бы базу с фрагментом своей таблицы.
0
|
0 / 0 / 0
Регистрация: 28.11.2012
Сообщений: 7
|
|
18.12.2012, 19:01 | 20 |
В таблице несколько полей, самые главные 2:
рег.номер дата а 21.01.12 а 29.03.12 а 11.04.12 а 09.05.12 а 21.11.12 в 01.01.11 в 21.01.11 в 23.08.12 в 06.09.12 в 08.11.12 Мне нужно что бы со значением одного рег.номера подсчитать разницу в датах (друг с другом, а последнюю с текущей). Даты по одному рег.номеру упорядочены по возрастанию. Но значений "рег.номеров" у меня много и так же к каждому большой перечень дат. Извините за не профессиональный язык и спасибо что тратите свое время.
0
|
18.12.2012, 19:01 | |
18.12.2012, 19:01 | |
Помогаю со студенческими работами здесь
20
Количество дней в месяце Количество дней в месяце Определить количество строк в компоненте ListBox и количество дней в выбранном месяце Определить количество дней в месяце Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |