Помогите, пожалуйста, определить текущую поездку человека. Логика определения "текущей поездки" для одного человека (имя n1), рассмотрим 9 разных случаев, используются столбцы date и name (желтые), столбцы from/to в вычислениях текущей поездки не участвуют, по ним уже далее определяется текущее местоположение, см ниже: 1 - последние поездки в прошлом. Если у человека есть только одна поездка в прошлом, то она считается текущей. 2 - последние поездки в прошлом. Если у человека есть только поездки в прошлом, то текущей считается последняя совершенная.
3 - последние поездки сегодня. Если у человека есть только одна поездка сегодня, то она считается текущей. 4 - последние поездки сегодня. Если у человека есть поездки только сегодня, то текущей считается первая из них.
5 - нет совершенных поездок, только запланированые. Если у человека есть только одна запланированая поездка, то она и бедет текущей. 6 - нет совершенных поездок, только запланированые. Если у человека есть несколько запланированых поездок, то текущей будет более ранняя из них.
7 - смешаные. Если у человека есть поездка(и) в прошлом и будущем, то текущаяя - последняя в прошлом. 8 - смешаные. Если у человека есть поездка(и) в прошлом и будущем, то текущаяя - последняя в прошлом. Этот пример уже для определения "текущего местоположения", там рассматривается случай неучтенной поездки, когда человек убывает не из того места куда приехал ранее. Не относится к вопросу топика. 9 - смешаные. Если у человека есть поездка(и) в прошлом, сегодня и в будущем, то текущаяя - первая за сегодня. Вроде описал все возможные варианты.
"х" отмечается запись, соответствующая текущей поездке.
Зачем это нужно? После того как выявили "текущую поездку" по полям from/to определяется текущее местоположение человека. Например для прошедших поездок (1,2) это будет поле to - то, куда приехал человек и где остался, так как больше нет поездок. Это посчитать легко через iif, надо только знать его "текущую поездку".
Раньше это было в экселе, в экселевском файле-примере более новая версия формулы, но она не без недостатков (работает только при сортировке по дате [oldest-newest], не обрабатывает несколько поездок происходящих сегодня и не обрабатывает несколько поездок произошедших в один день в прошлом). Так что это скорее для примера, а не копирования. На реальных данных таких случаев мало и они не критичны, поэтому все устраивало, в аксесе же хотелось бы все таки более близкий к идеалу вариант.
В экселевском файле-примере и базе аксеса данные одинаковы - 52 поездки (10 уникальных имен людей), соответственно запрос должен показать только 10 записей с "текущей поездкой" для каждого уникального человека.
*Еще нужен совет - как быть с тем что дата поездки хранится без времени, то есть если у человека две и более поездки в один день, то просто по дате их не различить. Да, в базе есть дополнительная информация со временем вылета, которой можно было бы дополнить дату, но не уверен, возможно в будущем появятся варианты поездок без точного времени. Может использовать первичный ключ в расчетах, у какой поездки он больше та и более "новая" (или это ересь и надо добавлять время)?
UPD. Обновил файлы. Оставил в файле аксеса только одну таблицу Travels и добавил отметки напротив тех поездок которые считались бы текущеми сегодня 16 янв (и до 20янв). Так как следующие поездки начинаются только 20го янв, то отметки бы оставались неизменными до 20го. В экселе поменял сегодняшнюю дату на today(), чтобы не смущало и совпадало с аксесом (была фиксированая дата 10янв чтобы была повторяемость результата изо дня в день при тестировании, в основном для сегодняшних поездок).
Доброго времени суток,
Есть таблица со множеством поездок для N людей.
Помогите, пожалуйста, определить текущую поездку человека. Логика определения "текущей поездки" для одного человека (имя n1), рассмотрим 9 разных случаев, используются столбцы date и name (желтые), столбцы from/to в вычислениях текущей поездки не участвуют, по ним уже далее определяется текущее местоположение, см ниже: 1 - последние поездки в прошлом. Если у человека есть только одна поездка в прошлом, то она считается текущей. 2 - последние поездки в прошлом. Если у человека есть только поездки в прошлом, то текущей считается последняя совершенная.
3 - последние поездки сегодня. Если у человека есть только одна поездка сегодня, то она считается текущей. 4 - последние поездки сегодня. Если у человека есть поездки только сегодня, то текущей считается первая из них.
5 - нет совершенных поездок, только запланированые. Если у человека есть только одна запланированая поездка, то она и бедет текущей. 6 - нет совершенных поездок, только запланированые. Если у человека есть несколько запланированых поездок, то текущей будет более ранняя из них.
7 - смешаные. Если у человека есть поездка(и) в прошлом и будущем, то текущаяя - последняя в прошлом. 8 - смешаные. Если у человека есть поездка(и) в прошлом и будущем, то текущаяя - последняя в прошлом. Этот пример уже для определения "текущего местоположения", там рассматривается случай неучтенной поездки, когда человек убывает не из того места куда приехал ранее. Не относится к вопросу топика. 9 - смешаные. Если у человека есть поездка(и) в прошлом, сегодня и в будущем, то текущаяя - первая за сегодня. Вроде описал все возможные варианты.
"х" отмечается запись, соответствующая текущей поездке.
Зачем это нужно? После того как выявили "текущую поездку" по полям from/to определяется текущее местоположение человека. Например для прошедших поездок (1,2) это будет поле to - то, куда приехал человек и где остался, так как больше нет поездок. Это посчитать легко через iif, надо только знать его "текущую поездку".
Раньше это было в экселе, в экселевском файле-примере более новая версия формулы, но она не без недостатков (работает только при сортировке по дате [oldest-newest], не обрабатывает несколько поездок происходящих сегодня и не обрабатывает несколько поездок произошедших в один день в прошлом). Так что это скорее для примера, а не копирования. На реальных данных таких случаев мало и они не критичны, поэтому все устраивало, в аксесе же хотелось бы все таки более близкий к идеалу вариант.
В экселевском файле-примере и базе аксеса данные одинаковы - 52 поездки (10 уникальных имен людей), соответственно запрос должен показать только 10 записей с "текущей поездкой" для каждого уникального человека.
*Еще нужен совет - как быть с тем что дата поездки хранится без времени, то есть если у человека две и более поездки в один день, то просто по дате их не различить. Да, в базе есть дополнительная информация со временем вылета, которой можно было бы дополнить дату, но не уверен, возможно в будущем появятся варианты поездок без точного времени. Может использовать первичный ключ в расчетах, у какой поездки он больше та и более "новая" (или это ересь и надо добавлять время)?
UPD. Обновил файлы. Оставил в файле аксеса только одну таблицу Travels и добавил отметки напротив тех поездок которые считались бы текущеми сегодня 16 янв (и до 20янв). Так как следующие поездки начинаются только 20го янв, то отметки бы оставались неизменными до 20го. В экселе поменял сегодняшнюю дату на today(), чтобы не смущало и совпадало с аксесом (была фиксированая дата 10янв чтобы была повторяемость результата изо дня в день при тестировании, в основном для сегодняшних поездок).user0
Что значит "текущая поездка"? У которой дата совпадает с сегодняшней? Если так, то что мешает поставить условие отбора =Date()? Или как-то учитывается продолжительность поездки? Если нужно для конкретного человека, как задаётся, для кого именно?
Короче, подробнее поясните на примере приложенной базы, потому что картинка не соответствует имеющимся полям
Что значит "текущая поездка"? У которой дата совпадает с сегодняшней? Если так, то что мешает поставить условие отбора =Date()? Или как-то учитывается продолжительность поездки? Если нужно для конкретного человека, как задаётся, для кого именно?
Короче, подробнее поясните на примере приложенной базы, потому что картинка не соответствует имеющимся полямPelena
"Черт возьми, Холмс! Но как??!!" Ю-money 41001765434816
>Что значит "текущая поездка"? У которой дата совпадает с сегодняшней? Если так, то что мешает поставить условие отбора =Date()? Слегка дополнил первое сообщение, описав логику определения "текущей поездки". Хотя может я тут надумал много лишнего и можно как-то проще определить местоположение человека на сегодняшнюю дату?
>Или как-то учитывается продолжительность поездки? Не учитывается. Раньше в экселе считалось только по именам и датам.
>Если нужно для конкретного человека, как задаётся, для кого именно? Нужно для всех уникальных людей, перечисленных в таблице Travels (уникальных там 10). Соответственно в результате запрос должен выдать 10 уникальных имен с их "текущей поездкой" (на каждого человека может быть только одна "текущая поездка").
Заменил файл пример в первом посте.
>Что значит "текущая поездка"? У которой дата совпадает с сегодняшней? Если так, то что мешает поставить условие отбора =Date()? Слегка дополнил первое сообщение, описав логику определения "текущей поездки". Хотя может я тут надумал много лишнего и можно как-то проще определить местоположение человека на сегодняшнюю дату?
>Или как-то учитывается продолжительность поездки? Не учитывается. Раньше в экселе считалось только по именам и датам.
>Если нужно для конкретного человека, как задаётся, для кого именно? Нужно для всех уникальных людей, перечисленных в таблице Travels (уникальных там 10). Соответственно в результате запрос должен выдать 10 уникальных имен с их "текущей поездкой" (на каждого человека может быть только одна "текущая поездка").
Select TMain.* From Travels TMain Where TMain.ETDtime = (Select Min(TChild.ETDtime) From Travels TChild Where TChild.[Date] = Date() And TMain.FullName = TChild.FullName) Union Select TMain.* From Travels TMain Left Join (Select Distinct FullName From Travels Where [Date] = Date()) TNow On (TMain.FullName = TNow.FullName) Where TMain.[Date] < Date() And TNow.FullName Is Null And TMain.[Date] = (Select Max(TDate.[Date]) From Travels TDate Where TDate.[Date] < Date() And TDate.FullName = TMain.FullName) And TMain.ETDtime = (Select Max(TTime.ETDtime) From Travels TTime Where TTime.[Date] < Date() And TTime.FullName = TMain.FullName And TTime.[Date] = TMain.[Date]) Union Select TMain.* From Travels TMain Left Join (Select Distinct FullName From Travels Where [Date] <= Date()) TNow On (TMain.FullName = TNow.FullName) Where TMain.[Date] > Date() And TNow.FullName Is Null And TMain.[Date] = (Select Min(TDate.[Date]) From Travels TDate Where TDate.[Date] > Date() And TDate.FullName = TMain.FullName) And TMain.ETDtime = (Select Min(TTime.ETDtime) From Travels TTime Where TTime.[Date] > Date() And TTime.FullName = TMain.FullName And TTime.[Date] = TMain.[Date]);
[/vba] Успехов.
Доброе время суток. Как-то так. [vba]
Код
Select TMain.* From Travels TMain Where TMain.ETDtime = (Select Min(TChild.ETDtime) From Travels TChild Where TChild.[Date] = Date() And TMain.FullName = TChild.FullName) Union Select TMain.* From Travels TMain Left Join (Select Distinct FullName From Travels Where [Date] = Date()) TNow On (TMain.FullName = TNow.FullName) Where TMain.[Date] < Date() And TNow.FullName Is Null And TMain.[Date] = (Select Max(TDate.[Date]) From Travels TDate Where TDate.[Date] < Date() And TDate.FullName = TMain.FullName) And TMain.ETDtime = (Select Max(TTime.ETDtime) From Travels TTime Where TTime.[Date] < Date() And TTime.FullName = TMain.FullName And TTime.[Date] = TMain.[Date]) Union Select TMain.* From Travels TMain Left Join (Select Distinct FullName From Travels Where [Date] <= Date()) TNow On (TMain.FullName = TNow.FullName) Where TMain.[Date] > Date() And TNow.FullName Is Null And TMain.[Date] = (Select Min(TDate.[Date]) From Travels TDate Where TDate.[Date] > Date() And TDate.FullName = TMain.FullName) And TMain.ETDtime = (Select Min(TTime.ETDtime) From Travels TTime Where TTime.[Date] > Date() And TTime.FullName = TMain.FullName And TTime.[Date] = TMain.[Date]);
Пытался дополнить предложеный вариант, но тщетно )
Подскажите, пожалуйста, как вывести не только совершенные поездки (как в решении предложеном выше), но и в случае, если у человека есть запланированая поездка, то отображать ее, вместо последней совершенной (в идеале еще с полями from/to произвести вычисление, см ниже).
Зачем это все необходимо? Чтобы построить репорт как на картинке, с текущим местоположением человека и первой предстоящей поездкой, если таковая имеется.
Город ГДЕ человек находится - тот, куда он прилетел в свою последнюю поездку в прошлом (поле to) или, если у человека только в будущем поездки, то из поля from.* Город КУДА человек собирается - тот, который значится в первой предстоящей поездке (поле to), если таковая имеется.*
*в экселе выбор городов для этих полей сделан в дополнительных столбцах через сравнение с текущей датой и маркерами "совершенной" / "первой предстоящей" поездки.
В приложеном архиве, база с запросом предложеным anvg и набросок репорта, также экселевский файл, где формулами реализовано (с оговорками) то что на картинке.
Пытался дополнить предложеный вариант, но тщетно )
Подскажите, пожалуйста, как вывести не только совершенные поездки (как в решении предложеном выше), но и в случае, если у человека есть запланированая поездка, то отображать ее, вместо последней совершенной (в идеале еще с полями from/to произвести вычисление, см ниже).
Зачем это все необходимо? Чтобы построить репорт как на картинке, с текущим местоположением человека и первой предстоящей поездкой, если таковая имеется.
Город ГДЕ человек находится - тот, куда он прилетел в свою последнюю поездку в прошлом (поле to) или, если у человека только в будущем поездки, то из поля from.* Город КУДА человек собирается - тот, который значится в первой предстоящей поездке (поле to), если таковая имеется.*
*в экселе выбор городов для этих полей сделан в дополнительных столбцах через сравнение с текущей датой и маркерами "совершенной" / "первой предстоящей" поездки.
В приложеном архиве, база с запросом предложеным anvg и набросок репорта, также экселевский файл, где формулами реализовано (с оговорками) то что на картинке.user0
Доброе время суток. Извиняюсь, но что-то не очень понял идею запроса. Так что как до меня дошло. Запрос выводит список людей, которые на текущую дату (по дате Date) находятся в городе To и в будущем по дате (Date) будут находится в городе To, если перемещение в этот To произошло из From, равному To в, ранее определённому для текущей даты. Updated (не учёл момент). Успехов.
Доброе время суток. Извиняюсь, но что-то не очень понял идею запроса. Так что как до меня дошло. Запрос выводит список людей, которые на текущую дату (по дате Date) находятся в городе To и в будущем по дате (Date) будут находится в городе To, если перемещение в этот To произошло из From, равному To в, ранее определённому для текущей даты. Updated (не учёл момент). Успехов.anvg
Да, вы все верно поняли (только время ETD в QWhereWillBe добавил, для отображения врремени убытия из текущей локации). Так-то я тот еще мастак излагать мысли прямо и доходчиво, благодарю за терпение )
Отдельное спасибо за разбиение запроса на части, так проще понять; смог дополнить запросы и вот финальный вид которого я добивался.
Слева все 10 людей с текущим местоположением и первой запланированой поездкой, справа все запланированые поездки сгруппированы по городам прибытия (тут не так сложно было, сам осилил), v - визитер, если человек не приписан к этой локации.
Еще раз огромное спасибо!
Доброго времени.
Да, вы все верно поняли (только время ETD в QWhereWillBe добавил, для отображения врремени убытия из текущей локации). Так-то я тот еще мастак излагать мысли прямо и доходчиво, благодарю за терпение )
Отдельное спасибо за разбиение запроса на части, так проще понять; смог дополнить запросы и вот финальный вид которого я добивался.
Слева все 10 людей с текущим местоположением и первой запланированой поездкой, справа все запланированые поездки сгруппированы по городам прибытия (тут не так сложно было, сам осилил), v - визитер, если человек не приписан к этой локации.