|
Посчитать в запросе сумму или разницу разных полей в смежных записях.
|
|||
---|---|---|---|
#18+
Приветствуй всех! Помогите с запросом. Есть таблица с кодом работников и датами приема и увольнения. Надо посчитать по каждому работнику, в каждой записи, количество дней между датой увольнения (указана в предыдущей записи) и датой приема (указана в текущей записи). ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2019, 19:52 |
|
Посчитать в запросе сумму или разницу разных полей в смежных записях.
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2019, 01:19 |
|
Посчитать в запросе сумму или разницу разных полей в смежных записях.
|
|||
---|---|---|---|
#18+
На будущее-прилагайте,пожалуйста,БД(таблицу с данными)-самое тяжелое их набирать ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2019, 01:42 |
|
Посчитать в запросе сумму или разницу разных полей в смежных записях.
|
|||
---|---|---|---|
#18+
ели поле по которому идет сравнение не содержит NULL выражение предУв упрощается: Код: vbnet 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2019, 11:15 |
|
Посчитать в запросе сумму или разницу разных полей в смежных записях.
|
|||
---|---|---|---|
#18+
sdkuели поле по которому идет сравнение не содержит NULL выражение предУв упрощается: Код: vbnet 1.
Огромное спасибо! Так тоже работает! ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2019, 12:44 |
|
Посчитать в запросе сумму или разницу разных полей в смежных записях.
|
|||
---|---|---|---|
#18+
sdku, а можно при вычислении предУв брать данные/переменные не из таблицы, а из текущего запроса? бд прилагаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2019, 12:51 |
|
Посчитать в запросе сумму или разницу разных полей в смежных записях.
|
|||
---|---|---|---|
#18+
wladimirrrsdku, а можноо при вычислении предУв брать данные/переменные не из таблицы, а изтекущего запроса бд прилагаю. Данные ВСЕГДА извлекаются из ТАБЛИЦ (хранилищ данных) ЗАПРОСАМИ (какие данные Вы собираетесь "брать из запроса" если поле ЗАПРОСА=полю ТАБЛИЦЫ (за исключением выражений, применения статистических функций или подчиненных запросов). А Вы разберитесь как работает подчиненный запрос,который отбирает 1 запись из копии таблицы со значением поля [уволен] меньшим чем значение поля [принят] в оригинале таблицы и записывает в поле [предУв] запроса. (SELECT TOP 1 уволен (выборка из первой записи поля [уволен]) FROM таблица1 as t1 (из копии таблицы,алиас "t1") WHERE таблица1.принят>t1.уволен (для которой дата приема в таблице больше даты увольнения в копии таблицы) and t1.кодР= таблица1.кодР (и [кодР]в копии=[кодР]оригинала) ORDER BY t1.уволен DESC (сортировка по убыванию делает запись с наиболее мало отличающуюся,в меньшую сторону,от [принят] первой в наборе записей- из нее и отбирается [уволен]-значение записывается в [предУв]) Уф! Ну вот-все что знал сказал. (Особенности национальной охоты.) ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2019, 14:09 |
|
Посчитать в запросе сумму или разницу разных полей в смежных записях.
|
|||
---|---|---|---|
#18+
sdkuwladimirrrsdku, а можноо при вычислении предУв брать данные/переменные не из таблицы, а изтекущего запроса бд прилагаю. Данные ВСЕГДА извлекаются из ТАБЛИЦ (хранилищ данных) ЗАПРОСАМИ (какие данные Вы собираетесь "брать из запроса" если поле ЗАПРОСА=полю ТАБЛИЦЫ (за исключением выражений, применения статистических функций или подчиненных запросов). А Вы разберитесь как работает подчиненный запрос,который отбирает 1 запись из копии таблицы со значением поля [уволен] меньшим чем значение поля [принят] в оригинале таблицы и записывает в поле [предУв] запроса. (SELECT TOP 1 уволен (выборка из первой записи поля [уволен]) FROM таблица1 as t1 (из копии таблицы,алиас "t1") WHERE таблица1.принят>t1.уволен (для которой дата приема в таблице больше даты увольнения в копии таблицы) and t1.кодР= таблица1.кодР (и [кодР]в копии=[кодР]оригинала) ORDER BY t1.уволен DESC (сортировка по убыванию делает запись с наиболее мало отличающуюся,в меньшую сторону,от [принят] первой в наборе записей- из нее и отбирается [уволен]-значение записывается в [предУв]) Уф! Ну вот-все что знал сказал. (Особенности национальной охоты.) Дело в том, что Дата_приема и Дата_увольнения являются результатом выражений. Например, в исходной таблице есть ДатаКонтрактаНачало и ДатаТрДоговораНачало, соответственно ДатаКонтрактаКонец и ДатаТрДоговораКонец. Они заполняются либо Контракт, либо ТрДоговор, т.е одна из двух. Соответственно Дата_приема и Дата_увольнения определяется в запросе, как не пустая. (is not Null). И дальше для вычисления предУв надо оперировать ими. Поэтому я и спросил, можно в качестве t1 использовать запрос или надо все эти выражения указывать в Вашем коде. Тогда получается более сложный код, в котором я могу заблудиться.)) ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2019, 14:40 |
|
Посчитать в запросе сумму или разницу разных полей в смежных записях.
|
|||
---|---|---|---|
#18+
используйте в качестве источника не таблицу,а сохраненный запрос (замените "таблица1" на "запросИмя"-источником данных запроса служит таблица или запрос -единственное-он должен соответствовать тому скрину что Вы приложили ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2019, 17:08 |
|
Посчитать в запросе сумму или разницу разных полей в смежных записях.
|
|||
---|---|---|---|
#18+
sdkuиспользуйте в качестве источника не таблицу,а сохраненный запрос (замените "таблица1" на "запросИмя"-источником данных запроса служит таблица или запрос -единственное-он должен соответствовать тому скрину что Вы приложили Отлично, я так и предполагал, спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2019, 22:08 |
|
Посчитать в запросе сумму или разницу разных полей в смежных записях.
|
|||
---|---|---|---|
#18+
В ФАК написано: "ранее сохраненные запросы тоже можно использовать как источники данных." 6400575 ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2019, 01:11 |
|
Посчитать в запросе сумму или разницу разных полей в смежных записях.
|
|||
---|---|---|---|
#18+
sdkuВ ФАК написано: "ранее сохраненные запросы тоже можно использовать как источники данных." 6400575 Что то я завис(. С таблицей работает, а с запросом не хочет. Нужна помощь! Прилагаю бд, в ней есть таблица QW12 и запрос Qw1_2, они полностью идентичные. Запрос2, который использует табл.QW12 работает, а идентичный Запрос1, который использует запрос Qw1_2 не хочет работать. В чем может быть причина? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2019, 16:02 |
|
Посчитать в запросе сумму или разницу разных полей в смежных записях.
|
|||
---|---|---|---|
#18+
wladimirrr, Выложите 2 таблицы QW12 и WorkHistory с названиями полей по русски(не страшно если они будут длинными)т.к я не могу понять смысла некоторых. И полно и подробно опишите задачу, стоящую перед Вами-какие исходные данные имеются(будут вноситься оператором) и что Вы хотите видеть на выходе-когда все "вкурю" помогу ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2019, 16:52 |
|
Посчитать в запросе сумму или разницу разных полей в смежных записях.
|
|||
---|---|---|---|
#18+
sdku, таблица исходная одна - WorkHistory. Из этой таблицы в запросе Qw1 я формирую значения От и До для каждого работника. "От" это дата начала работы, "До" это дата окончания работы. Надо посчитать по каждому работнику количество дней между предыдущим окончанием работы (До) и текущим началом работы (От). Запрос Qw1_2 это производный, более короткий запрос от Qw1. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2019, 19:31 |
|
Посчитать в запросе сумму или разницу разных полей в смежных записях.
|
|||
---|---|---|---|
#18+
не совсем понял о чем речь - надо посчитать дни для работника со времени последнего приема на работу? аксиомы: увольнение всегда позже приема. у работника дата приема есть всегда. у неуволенных дата считается до сегодня. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2019, 20:43 |
|
Посчитать в запросе сумму или разницу разных полей в смежных записях.
|
|||
---|---|---|---|
#18+
wladimirrr, все правильно еще в моем первом примере.Запрос мог не правильно работать из-за неверных данных:посмотрите записи для работника с кодом 14 увольнение 06.09.2019 прием 26.03.2019 дата приема не может быть меньше предыдущего увольнения (аналогично для работника с кодом 16-в прилагаемом файле все исправлено) Такие неверные данные не должны попадать в таблицу-это надо проверять на стадии ввода А запрос на неверных данных не будет верно работать,если одна запись,то предыдущего увольнения нет в принципе аналогично если поля принят и уволен пусты. Если Вам надо хранить информацию о контрактах,договорах-делайте отдельные таблицы-не пытайтесь всю инфу всунуть в одну таблицу-это грубая ошибка. Предлагаю такую схему: Работники связь 1:М с таблицами контракт и договор ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2019, 21:36 |
|
Посчитать в запросе сумму или разницу разных полей в смежных записях.
|
|||
---|---|---|---|
#18+
sdku, не совсем то, что нужно. Давайте еще раз попробуем. Посмотрите в бд Запрос1. Он не работает. Запрос2 работает. Мне нужно, что бы работал Запрос1. Даты я посмотрел, они все корректные. Разница между Запросом1 и Запросом2 в том, что 1-й использует в качестве данных запрос, а 2-й таблицу, в остальном они абсолютно одинаковые. Мне нужно, что бы источником данных служил запрос, а не таблица. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2019, 23:10 |
|
Посчитать в запросе сумму или разницу разных полей в смежных записях.
|
|||
---|---|---|---|
#18+
wladimirrr, По производительности может быть хуже, но работает с подзапросами: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
Сравнивать проще по дате приема, так как она всегда известна. Другой подход в сравнении периодов с незакрытой датой это приравнивать ее к большому числу. Например у себя в проекте использую функцию на VBA: Код: vbnet 1. 2. 3. 4. 5. 6. 7.
тогда сравнение выглядело бы Код: sql 1.
и еще замечание! не используйте зарезервированные слова ядра СУБД Access в качестве имен столбцов. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2019, 23:53 |
|
Посчитать в запросе сумму или разницу разных полей в смежных записях.
|
|||
---|---|---|---|
#18+
wladimirrr, 1.Измените названия полей с [from] и [to] на любые другие типа start,finish;ot,do (и впредь НИКОГДА не используйте в качестве имен полей зарезервированные слова,коими являются FROM и TO) 2.Все заработает. Но я не могу понять ЗАЧЕМ 4 запроса (какой глубокий, неведомый смысл в этом),если нужные данные извлекаются,вычисления производятся,осуществляется нужный отбор одним (равносильно поездке из Москвы в Тверь через Владивосток) ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2019, 01:13 |
|
Посчитать в запросе сумму или разницу разных полей в смежных записях.
|
|||
---|---|---|---|
#18+
Вдогонку:и еще раз подумайте над структурой таблицы WorkHistory (БД) в которую Вы засунули минимум две сущности:контракт и работу(когда принят и уволен),а может и больше-не вникал.Одно из основополагающих правил "базостроения" гласит что таблица должна полно (в нужном Вам объеме) описывать одну и только одну сущность Настоятельно рекомендую почитать и усвоить про нормальные формы (в сети куча материала про это) ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2019, 01:38 |
|
Посчитать в запросе сумму или разницу разных полей в смежных записях.
|
|||
---|---|---|---|
#18+
sdkuwladimirrr, 1.Измените названия полей с [from] и [to] на любые другие типа start,finish;ot,do (и впредь НИКОГДА не используйте в качестве имен полей зарезервированные слова,коими являются FROM и TO) 2.Все заработает. Но я не могу понять ЗАЧЕМ 4 запроса (какой глубокий, неведомый смысл в этом),если нужные данные извлекаются,вычисления производятся,осуществляется нужный отбор одним (равносильно поездке из Москвы в Тверь через Владивосток) Изменил названия полей, убрал промежуточный запрос, вроде заработало! Спасибо! Насчет структуры таблицы, я полностью с Вами согласен, просто эту базу разрабатывал не я, мне дали её доработать. Переделывать в ней структуру, себе дороже. Прикрепляю работающий вариант, может кому пригодится. Еще раз большое спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2019, 11:23 |
|
Посчитать в запросе сумму или разницу разных полей в смежных записях.
|
|||
---|---|---|---|
#18+
wladimirrr, пункт 2 в моем сообщении не требует изменения структуры БД (этот пункт верен и при такой схеме) ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2019, 12:40 |
|
Посчитать в запросе сумму или разницу разных полей в смежных записях.
|
|||
---|---|---|---|
#18+
И все-таки Q1 лишний. (замените в полях запроса1 ссылки на поля Q1 на соответствующие выражения из полей Q1,добавьте поля по которым проводится отбор(не выводить на экран) и сделайте его(запроса1) источником таблицу.Выражения будут довольно большим,но это не страшно-если хотите попроще и понятней осваивайте функции VBA и используйте их в запросе ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2019, 13:24 |
|
|
start [/forum/topic.php?desktop=1&fid=45&tid=1610667]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
31ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
others: | 315ms |
total: | 449ms |
0 / 0 |