powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Запрос к нескольким таблицам
13 сообщений из 13, страница 1 из 1
Запрос к нескольким таблицам
    #32662607
Cyr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Cyr
Гость
есть две таблицы:
pr1 - приказы о приёме на работу
pr2 - кадровые перемещения

pr1 имеет поля:
sotr - код сотрудника
dp1 - дата приёма
pod1 - код подразделения

pr2 имеет поля:
sotr - код сотрудника
dp2 - дата перевода
pod2 - код подразделения

Требуется вывести сотрудников с текущими подразделениями.
Нужно брать подразделение из той таблицы,
у которой дата dp1 или dp2 свежее для данного сотрудника.
...
Рейтинг: 0 / 0
Запрос к нескольким таблицам
    #32662711
MoonRabbit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, а на каком языке-то?

В любом случае алгоритм наверное такой:

Если существует хоть одна запись в таблице pr2
тогда выбрать запись с максимальной датой для сотрудника из таблицы pr2
иначе выбрать запись для сотрудника из таблицы pr1
...
Рейтинг: 0 / 0
Запрос к нескольким таблицам
    #32663283
Cyr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Cyr
Гость
Нужно сделать SQL-запрос.
Я так понимаю с функцией max()
Т.е. выбирается запись pod1 или pod2 из двух таблиц со свежайшей датой dp1 или dp2
Т.е. нужно объединить pod1 с pod2 в одно поле (pod) и dp1 с dp2 в другое (dp).
Сгруппировать их по сотрудникам и выбрать.
Типа так:
SELECT sotr, pod, max(dp)
FROM pr
GROUP BY sotr

Вопрос: как объединить эти поля в запросе?
...
Рейтинг: 0 / 0
Запрос к нескольким таблицам
    #32663326
MoonRabbit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет, не так...
Наверное, так:
Select
Sotr,
Pod = если есть в pr2 хоть одна запись тогда код подразделения из pr2 для максимальной даты иначе код подразделения из pr1
From pr1

Сорри, точного синтаксиса не знаю :)
И вопрос надо было куда-нидь в MSSQL запостить, там спецов больше обитает по T-SQL
...
Рейтинг: 0 / 0
Запрос к нескольким таблицам
    #32663339
Cyr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Cyr
Гость
Нет, нужно обязательно максимальную дату из двух таблиц.
Потому, что человек может несколько раз приниматься и увольняться и
несколко раз переводится из подразделения в подразделение.
Так что, полюбому надо объёдинять эти две таблицы, группировать по сотруднику и выбирать подразделение по максимальной дате.
...
Рейтинг: 0 / 0
Запрос к нескольким таблицам
    #32663392
MoonRabbit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда есть вариант сделать полный union таблицам, и уже из объединенного массива
делать выборку максимальных дат для сотрудника, с группировкой по сотруднику.
...
Рейтинг: 0 / 0
Запрос к нескольким таблицам
    #32663431
Cyr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Cyr
Гость
Именно так! осталось только с синтаксисом разобраться...
...
Рейтинг: 0 / 0
Запрос к нескольким таблицам
    #32664930
Cyr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Cyr
Гость
UNION то получился...

SELECT sotr, pod1, dp1
FROM pr1
UNION
SELECT sotr, pod2, dp2
FROM pr2

А как вот теперь из этого объединения
выбирать по максимальной дате?
...
Рейтинг: 0 / 0
Запрос к нескольким таблицам
    #32665361
MoonRabbit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вы можете данный запрос выгрузить во временную таблицу,
типа into #a,
И затем выбрать максимальную дату с группировкой по сотруднику, типа:
Select Sotr, max(DP)
From #a
Group by Sotr
...
Рейтинг: 0 / 0
Запрос к нескольким таблицам
    #32665484
MoonRabbit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, я не очень силен в T-SQL-е, так что смотрите BOL,
я всего-лишь предложил алгоритм :-)
...
Рейтинг: 0 / 0
Запрос к нескольким таблицам
    #32666752
Cyr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Cyr
Гость
MoonRabbitА вы можете данный запрос выгрузить во временную таблицу,
типа into #a,
И затем выбрать максимальную дату с группировкой по сотруднику, типа:
Select Sotr, max(DP)
From #a
Group by Sotr

В этом случае мы получим только имя сотрудника и максимальную дату.
А нам то нужно подразделение на эту дату.
...
Рейтинг: 0 / 0
Запрос к нескольким таблицам
    #32666833
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cyr MoonRabbitА вы можете данный запрос выгрузить во временную таблицу,
типа into #a,
И затем выбрать максимальную дату с группировкой по сотруднику, типа:
Select Sotr, max(DP)
From #a
Group by Sotr

В этом случае мы получим только имя сотрудника и максимальную дату.
А нам то нужно подразделение на эту дату.
Ну и джоините слева ваши таблицы подразделений по Sotr и dp. Непонятным остается момент, из какой таблицы брать подразделение, если записи окажуться в двух таблицах.
З.Ы. Если вопрос по MSSQL, задавали бы в соответствующем форуме - там быстрее ответят.
...
Рейтинг: 0 / 0
Запрос к нескольким таблицам
    #32667184
Cyr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Cyr
Гость
Вопрос по стандартному SQL.
А реализовано всё будет на delphi
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Запрос к нескольким таблицам
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]