Домашняя страница Undo Do Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Поиск уникальных значений в массиве с условием по дате - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: _Boroda_, китин  
Мир MS Excel » Вопросы и решения » Excel и другие приложения » Access » Поиск уникальных значений в массиве с условием по дате
Поиск уникальных значений в массиве с условием по дате
user0 Дата: Понедельник, 16.01.2017, 13:00 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 152
Репутация: 8 ±
Замечаний: 0% ±

Excel 2013, 2016
Доброго времени суток,

Есть таблица со множеством поездок для 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янв чтобы была повторяемость результата изо дня в день при тестировании, в основном для сегодняшних поездок).
К сообщению приложен файл: CurrentTravel.zip (42.6 Kb)


Сообщение отредактировал user0 - Понедельник, 16.01.2017, 17:07
 
Ответить
СообщениеДоброго времени суток,

Есть таблица со множеством поездок для 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
Дата добавления - 16.01.2017 в 13:00
MichaelObeli Дата: Понедельник, 16.01.2017, 14:18 | Сообщение № 2
Группа: Пользователи
Ранг: Прохожий
Сообщений: 1
Репутация: 0 ±
Замечаний: 20% ±

MichaelObeli
[moder]Удалено. К Excel не относится. Пользователь заблокирован[/moder]


Сообщение отредактировал _Boroda_ - Понедельник, 16.01.2017, 14:23
 
Ответить
Сообщение[moder]Удалено. К Excel не относится. Пользователь заблокирован[/moder]

Автор - MichaelObeli
Дата добавления - 16.01.2017 в 14:18
Pelena Дата: Понедельник, 16.01.2017, 14:45 | Сообщение № 3
Группа: Админы
Ранг: Местный житель
Сообщений: 19181
Репутация: 4420 ±
Замечаний: ±

Excel 365 & Mac Excel
Что значит "текущая поездка"? У которой дата совпадает с сегодняшней? Если так, то что мешает поставить условие отбора =Date()?
Или как-то учитывается продолжительность поездки?
Если нужно для конкретного человека, как задаётся, для кого именно?

Короче, подробнее поясните на примере приложенной базы, потому что картинка не соответствует имеющимся полям


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеЧто значит "текущая поездка"? У которой дата совпадает с сегодняшней? Если так, то что мешает поставить условие отбора =Date()?
Или как-то учитывается продолжительность поездки?
Если нужно для конкретного человека, как задаётся, для кого именно?

Короче, подробнее поясните на примере приложенной базы, потому что картинка не соответствует имеющимся полям

Автор - Pelena
Дата добавления - 16.01.2017 в 14:45
user0 Дата: Понедельник, 16.01.2017, 15:46 | Сообщение № 4
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 152
Репутация: 8 ±
Замечаний: 0% ±

Excel 2013, 2016
>Что значит "текущая поездка"? У которой дата совпадает с сегодняшней? Если так, то что мешает поставить условие отбора =Date()?
Слегка дополнил первое сообщение, описав логику определения "текущей поездки".
Хотя может я тут надумал много лишнего и можно как-то проще определить местоположение человека на сегодняшнюю дату?

>Или как-то учитывается продолжительность поездки?
Не учитывается. Раньше в экселе считалось только по именам и датам.

>Если нужно для конкретного человека, как задаётся, для кого именно?
Нужно для всех уникальных людей, перечисленных в таблице Travels (уникальных там 10). Соответственно в результате запрос должен выдать 10 уникальных имен с их "текущей поездкой" (на каждого человека может быть только одна "текущая поездка").

Заменил файл пример в первом посте.


Сообщение отредактировал user0 - Понедельник, 16.01.2017, 17:05
 
Ответить
Сообщение>Что значит "текущая поездка"? У которой дата совпадает с сегодняшней? Если так, то что мешает поставить условие отбора =Date()?
Слегка дополнил первое сообщение, описав логику определения "текущей поездки".
Хотя может я тут надумал много лишнего и можно как-то проще определить местоположение человека на сегодняшнюю дату?

>Или как-то учитывается продолжительность поездки?
Не учитывается. Раньше в экселе считалось только по именам и датам.

>Если нужно для конкретного человека, как задаётся, для кого именно?
Нужно для всех уникальных людей, перечисленных в таблице Travels (уникальных там 10). Соответственно в результате запрос должен выдать 10 уникальных имен с их "текущей поездкой" (на каждого человека может быть только одна "текущая поездка").

Заменил файл пример в первом посте.

Автор - user0
Дата добавления - 16.01.2017 в 15:46
anvg Дата: Понедельник, 16.01.2017, 22:15 | Сообщение № 5
Группа: Друзья
Ранг: Ветеран
Сообщений: 581
Репутация: 271 ±
Замечаний: 0% ±

2016, 365
Доброе время суток.
Как-то так.
[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]);
[/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]);
[/vba]
Успехов.

Автор - anvg
Дата добавления - 16.01.2017 в 22:15
user0 Дата: Вторник, 17.01.2017, 12:54 | Сообщение № 6
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 152
Репутация: 8 ±
Замечаний: 0% ±

Excel 2013, 2016
anvg,
Да, то что нужно.
Спасибо огромное!
 
Ответить
Сообщениеanvg,
Да, то что нужно.
Спасибо огромное!

Автор - user0
Дата добавления - 17.01.2017 в 12:54
user0 Дата: Вторник, 24.01.2017, 13:15 | Сообщение № 7
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 152
Репутация: 8 ±
Замечаний: 0% ±

Excel 2013, 2016
Пытался дополнить предложеный вариант, но тщетно )

Подскажите, пожалуйста, как вывести не только совершенные поездки (как в решении предложеном выше), но и в случае, если у человека есть запланированая поездка, то отображать ее, вместо последней совершенной (в идеале еще с полями from/to произвести вычисление, см ниже).

Зачем это все необходимо? Чтобы построить репорт как на картинке, с текущим местоположением человека и первой предстоящей поездкой, если таковая имеется.


Город ГДЕ человек находится - тот, куда он прилетел в свою последнюю поездку в прошлом (поле to) или, если у человека только в будущем поездки, то из поля from.*
Город КУДА человек собирается - тот, который значится в первой предстоящей поездке (поле to), если таковая имеется.*

*в экселе выбор городов для этих полей сделан в дополнительных столбцах через сравнение с текущей датой и маркерами "совершенной" / "первой предстоящей" поездки.

В приложеном архиве, база с запросом предложеным anvg и набросок репорта, также экселевский файл, где формулами реализовано (с оговорками) то что на картинке.
К сообщению приложен файл: CurrentLoc_Next.zip (86.0 Kb)
 
Ответить
СообщениеПытался дополнить предложеный вариант, но тщетно )

Подскажите, пожалуйста, как вывести не только совершенные поездки (как в решении предложеном выше), но и в случае, если у человека есть запланированая поездка, то отображать ее, вместо последней совершенной (в идеале еще с полями from/to произвести вычисление, см ниже).

Зачем это все необходимо? Чтобы построить репорт как на картинке, с текущим местоположением человека и первой предстоящей поездкой, если таковая имеется.


Город ГДЕ человек находится - тот, куда он прилетел в свою последнюю поездку в прошлом (поле to) или, если у человека только в будущем поездки, то из поля from.*
Город КУДА человек собирается - тот, который значится в первой предстоящей поездке (поле to), если таковая имеется.*

*в экселе выбор городов для этих полей сделан в дополнительных столбцах через сравнение с текущей датой и маркерами "совершенной" / "первой предстоящей" поездки.

В приложеном архиве, база с запросом предложеным anvg и набросок репорта, также экселевский файл, где формулами реализовано (с оговорками) то что на картинке.

Автор - user0
Дата добавления - 24.01.2017 в 13:15
anvg Дата: Среда, 25.01.2017, 12:14 | Сообщение № 8
Группа: Друзья
Ранг: Ветеран
Сообщений: 581
Репутация: 271 ±
Замечаний: 0% ±

2016, 365
Доброе время суток.
Извиняюсь, но что-то не очень понял идею запроса. Так что как до меня дошло.
Запрос выводит список людей, которые на текущую дату (по дате Date) находятся в городе To и в будущем по дате (Date) будут находится в городе To, если перемещение в этот To произошло из From, равному To в, ранее определённому для текущей даты.
Updated (не учёл момент). :(
Успехов.
К сообщению приложен файл: 170123_CurrentL.zip (36.8 Kb)


Сообщение отредактировал anvg - Среда, 25.01.2017, 15:47
 
Ответить
СообщениеДоброе время суток.
Извиняюсь, но что-то не очень понял идею запроса. Так что как до меня дошло.
Запрос выводит список людей, которые на текущую дату (по дате Date) находятся в городе To и в будущем по дате (Date) будут находится в городе To, если перемещение в этот To произошло из From, равному To в, ранее определённому для текущей даты.
Updated (не учёл момент). :(
Успехов.

Автор - anvg
Дата добавления - 25.01.2017 в 12:14
user0 Дата: Четверг, 26.01.2017, 14:26 | Сообщение № 9
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 152
Репутация: 8 ±
Замечаний: 0% ±

Excel 2013, 2016
Доброго времени.

Да, вы все верно поняли (только время ETD в QWhereWillBe добавил, для отображения врремени убытия из текущей локации).
Так-то я тот еще мастак излагать мысли прямо и доходчиво, благодарю за терпение )

Отдельное спасибо за разбиение запроса на части, так проще понять; смог дополнить запросы и вот финальный вид которого я добивался.


Слева все 10 людей с текущим местоположением и первой запланированой поездкой,
справа все запланированые поездки сгруппированы по городам прибытия (тут не так сложно было, сам осилил),
v - визитер, если человек не приписан к этой локации.

Еще раз огромное спасибо!
 
Ответить
СообщениеДоброго времени.

Да, вы все верно поняли (только время ETD в QWhereWillBe добавил, для отображения врремени убытия из текущей локации).
Так-то я тот еще мастак излагать мысли прямо и доходчиво, благодарю за терпение )

Отдельное спасибо за разбиение запроса на части, так проще понять; смог дополнить запросы и вот финальный вид которого я добивался.


Слева все 10 людей с текущим местоположением и первой запланированой поездкой,
справа все запланированые поездки сгруппированы по городам прибытия (тут не так сложно было, сам осилил),
v - визитер, если человек не приписан к этой локации.

Еще раз огромное спасибо!

Автор - user0
Дата добавления - 26.01.2017 в 14:26
Мир MS Excel » Вопросы и решения » Excel и другие приложения » Access » Поиск уникальных значений в массиве с условием по дате
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!