powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Помогите с запросом
25 сообщений из 94, страница 1 из 4
Помогите с запросом
    #39538113
Игорь К-24
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
База данных электронной проходной Perco. FireBird 2.5
Есть 3 таблицы
1 Staff - сотрудники - поле ID_STAFF
2 SubDiv_REF - подразделения - поле ID_REF
3 STAFF_REF - таблица между ними, показывает с какого периода сотрудник работал в каком-либо подразделении
поля
STAFF_ID - ссылка на сотрудника = Staff.ID_STAFF
SUBDIV_ID - ссылка на подразделение = SubDiv_REF.ID_REF
DATE_ACTION - Дата перехода сотрудника в подразделение

Требуется получить список сотрудников с последним подразделением где он работает

select s.*,r.* from staff s
left join staff_ref r on s.id_staff = r.staff_id

1. Как ограничить список подразделений только последним значением по данному сотруднику
(с максимальным значением поля STAFF_REF.DATE_ACTION по сотруднику) ?
2 как подцепить 3 таблицу SubDiv_REF с наименованиями подразделений?

В итоге нужна плоская таблица Сотрудник-Подразделение ( Staff.ID_STAFF - SubDiv_REF.ID_REF )


Спасибо.
...
Рейтинг: 0 / 0
Помогите с запросом
    #39538136
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь К-24,

контр-вопрос про
staff left join staff_ref

- у вас что, могут быть сотрудники не включенные в подразделения, или left join тут от балды?

http://www.ibase.ru/joins/
...
Рейтинг: 0 / 0
Помогите с запросом
    #39538138
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
select Staff.ID_STAFF,
  (select first 1 Name from SubDiv_REF, STAFF_REF
      where SubDiv_REF.ID_REF = STAFF_REF.ID_REF
          and STAFF_REF.ID_STAFF = Staff.ID_STAFF
      order by DATE_ACTION desc)
from Staff



?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Помогите с запросом
    #39538140
Игорь К-24
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kdv,
от балды
...
Рейтинг: 0 / 0
Помогите с запросом
    #39538147
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь К-24Требуется получить список сотрудников с последним подразделением где он работаетстранное требование, смысл в последнем, если куда удобнее и понятнее получить подразделение активное в на требуемую дату.
Работник может быть одновременной в двух подразделениях?
...
Рейтинг: 0 / 0
Помогите с запросом
    #39538164
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_Pisarevsky> куда удобнее и понятнее получить подразделение активное в на требуемую дату.

Было бы о чём спорить... Ну напиши ему запрос
на дату, он туда current_date подставит, делов-то.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Помогите с запросом
    #39538181
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов РустамНу напиши ему запросЕсли б я был техподдержкой Perco, а так, автор только лефт джойн от балды прислал и никаких более попыток, лениво все писать за него. Помочь - да, вместо - нет.
...
Рейтинг: 0 / 0
Помогите с запросом
    #39538182
Игорь К-24
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гаджимурадов Рустам,
Работает, спасибо
...
Рейтинг: 0 / 0
Помогите с запросом
    #39538189
Игорь К-24
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ivan_Pisarevsky, Текущее подразделение, где работает сотрудник является последним по дате. т.к. оно изменяется на основании приказа ОК и дата смены подразделения не может быть больше текущей.
...
Рейтинг: 0 / 0
Помогите с запросом
    #39538197
Игорь К-24
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ivan_PisarevskyГаджимурадов РустамНу напиши ему запросЕсли б я был техподдержкой Perco, а так, автор только лефт джойн от балды прислал и никаких более попыток, лениво все писать за него. Помочь - да, вместо - нет.
Зря Вы так. Пытался. Только зациклился на left join. Всем спасибо, пойду прикручивать.
...
Рейтинг: 0 / 0
Помогите с запросом
    #39538251
Игорь К-24
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На всякий случай, рабочий вариант
автор Гаджимурадов Рустам select Staff.*,
(select first 1 DISPLAY_Name from SubDiv_REF, STAFF_REF
where SubDiv_REF.ID_REF = STAFF_REF.SUBDIV_ID
and STAFF_REF.STAFF_ID = Staff.ID_STAFF
order by DATE_ACTION desc)
from Staff
...
Рейтинг: 0 / 0
Помогите с запросом
    #39538276
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интересно вот, DATE_ACTION - это DATE или TIMESTAMP ?
Если ли UNIQUE CONSTRAINT на связку полей (DATE_ACTION + STAFF_ID ) ?

Код: sql
1.
 SELECT MAX(DATE_ACTION), STAFF_ID FROM STAFF_REF GROUP BY 2



Вроде бы очевидно.

Код: sql
1.
2.
3.
4.
5.
 SELECT STAFF_ID, SUBDIV_ID /* PK_ID и прочие столбцы по вкусу */
FROM STAFF_REF S1
JOIN ( 
  SELECT MAX(DATE_ACTION) as Last, STAFF_ID FROM STAFF_REF GROUP BY 2 
) as S2 ON S1.DATE_ACTION = S2.LAST AND S1.STAFF_ID = S2.STAFF_ID



Вроде тоже просто.

Код: sql
1.
2.
3.
4.
5.
6.
7.
 SELECT D.DISPLAY_Name as Department, E.*
FROM STAFF E
JOIN STAFF_REF S1 ON E.ID_STAFF = S1.STAFF_ID 
JOIN ( 
  SELECT MAX(DATE_ACTION) as Last, STAFF_ID FROM STAFF_REF GROUP BY 2 
) as S2 ON S1.DATE_ACTION = S2.LAST AND S1.STAFF_ID = S2.STAFF_ID
JOIN SubDiv_REF D ON D.ID_REF = S1.SUBDIV_ID
...
Рейтинг: 0 / 0
Помогите с запросом
    #39538287
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch> Интересно вот, DATE_ACTION - это DATE или TIMESTAMP ?

А какая разница? Сотрудники по три раза на дню по отделам скачут?

Arioch> Если ли UNIQUE CONSTRAINT на связку полей (DATE_ACTION + STAFF_ID ) ?

Зачем? И без DIV_ID он не нужен.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Помогите с запросом
    #39538304
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов РустамСотрудники по три раза на дню по отделам скачут?

ОБЫЧНО - нет. Хотя если в Калабуховском доме большая свара - то почему бы и нет.

Но ОБЫЧНО все программы работают без ошибок.
Ошибки и получаются, когда мы считали, что зелёное в реальной жизни треугольным не бывает, а оно вот поди ж ты, взяло и случилось

Гаджимурадов РустамЗачем? И без DIV_ID он не нужен.

Чтобы не было неожиданностей.

SUBDIV_ID как раз в этом ограничении не нужен вообще.

БД построена так, что в один день на одного сотрудника двух приказов быть не может.
Если же это случилось - нужно сдаваться в любом случае, и одинаковые там отделы в обоих приказах или разные уже не имеет значения
...
Рейтинг: 0 / 0
Помогите с запросом
    #39538344
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch> SUBDIV_ID как раз в этом ограничении не нужен вообще.
Arioch> БД построена так, что в один день на одного сотрудника
Arioch> двух приказов быть не может.

Ну вот, как пафосно начинал и до чего скатился... :)


Arioch> одинаковые там отделы в обоих приказах или разные уже не имеет значения

В смысле? Совместителей никогда не видел что ли?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Помогите с запросом
    #39538453
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов РустамArioch> SUBDIV_ID как раз в этом ограничении не нужен вообще.
Arioch> БД построена так, что в один день на одного сотрудника
Arioch> двух приказов быть не может.

Ну вот, как пафосно начинал и до чего скатился... :)


Arioch> одинаковые там отделы в обоих приказах или разные уже не имеет значения

В смысле? Совместителей никогда не видел что ли?


Предположу что один и тот же человек может быть сотрудником в разных организациях. И тупо заведен в справочнике сотрудников N раз.
...
Рейтинг: 0 / 0
Помогите с запросом
    #39538619
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fraks> И тупо заведен в справочнике сотрудников N раз.

Не, это тупо бардак и ошибки. Типа когда сотрудник
уволился-вернулся - заводить его по новой, вместо
актуализирования старой записи. Я говорил именно
о совместителях - когда человек работает в двух
отделах одновременно (возможно, во втором не на
полную ставку).
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Помогите с запросом
    #39538685
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов РустамЯ говорил именно о совместителях -
когда человек работает в двух отделах одновременно
Хорошее замечание. Как раз на тему зеленого и треугольного одновременно.

Пропустил реплику (и ее кажется все проигнорировали, включая топикстартера и тебя): Ivan_PisarevskyРаботник может быть одновременной в двух подразделениях?

Но ведь такой случай, опять таки, невозможен при текущей структуре БД и при запросе, предложенном выше.

Гаджимурадов Рустам
Код: sql
1.
2.
3.
  (select first 1 Name from SubDiv_REF, STAFF_REF
..............
      order by DATE_ACTION desc)



Вот какой из нескольких одновременно актуальных отделов такой запрос вернет?
А любой, в какой последним засунули - тот и вернёт.

А если в оба засунули одним приказом, т.е. DATE_ACTION совпадает, хоть бы оно даже было и TIMESTAMP а не DATE, то получаем типовой рандом.

И в итоге надо писать две SubDiv_REF таблицы:
Одну - для текущего состояния, и вторую - историческую, для всех движений.
И неплохо бы завести третью таблицу - с конкретными приказами, на которую и давать ссылку вместо DATE_ACTION

Либо же в SubDiv_REF добавлять поле типа DATE_ACTION_END и заполнять его для прошлых должностей. Тогда текущей отделы те, у которых DATE_ACTION_END IS NULL

Слегка напоминает старый флейм 18494107
Я вчера про это хотел заикнуться, но влом было.
...
Рейтинг: 0 / 0
Помогите с запросом
    #39538763
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch> Хорошее замечание. Как раз на тему зеленого и треугольного одновременно.
Arioch> Пропустил реплику (и ее кажется все проигнорировали, включая ... тебя)

Хватит уже бред нести.

> Но ведь такой случай, опять таки, невозможен при текущей структуре БД

Враньё.

> и при запросе, предложенном выше.

Его легко подправить (дописать ещё один вложенный запрос).


> И в итоге надо писать две SubDiv_REF таблицы:
> Одну - для текущего состояния, и вторую - историческую, для всех движений.

Пижнец, насяльника! (с) Рано тебе в архитекторы, рано.

> Слегка напоминает старый флейм 18494107

Знатный топик, забавный.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Помогите с запросом
    #39538786
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам> Но ведь такой случай, опять таки, невозможен при текущей структуре БД
Враньё.

Демонстрируй, только без додумываний и дописываний новых таблиц и столбцов, не упомянутых ранее.
Пока от тебя только хамство.

> и при запросе, предложенном выше.
Его легко подправить (дописать ещё один вложенный запрос).

Но ты не дописал и не подправил.
Это факт, хотя ты его и пытаешься замылить.

Твой запрос ничем не лучше моего - мой тоже "легко подправить".

Пижнец, насяльника! (с) Рано тебе в архитекторы, рано.

Похвалил себя гуру, чей вклад в архитектуры исчерпывается труизмом, что его запросы "легко поправить".
Кому-нибудь другому, конечно, не самому же гениалиссимусу от архитектуы этим заниматься.
...
Рейтинг: 0 / 0
Помогите с запросом
    #39538856
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Утомил, Д'Артаньян, ты маладец!
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Помогите с запросом
    #39538877
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Бедный гениалиссимус.
Полчаса пытался выдумать пример и не смог.
Соболезную.

Гаджимурадов Рустам> Но ведь такой случай, опять таки, невозможен при текущей структуре БД

Враньё.

Может быть признаешь теперь, что это твоё враньё было, а не моё?
...
Рейтинг: 0 / 0
Помогите с запросом
    #39538884
жужель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Помогите с запросом
    #39538900
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Оу, быдло никак не хочет успокоиться!.. :)

Arioch> Полчаса пытался выдумать пример и не смог.

Ну, "не смог придумать пример" - ещё ладно
(хотите пример - их есть у меня!), но почему
полчаса-то? Держи, болезный:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Staff - ID - Name
1 Петя
2 Вася

SubDiv_REF - ID - Name
1 Бухи
2 Айтишники

STAFF_REF - STAFF_ID - SUBDIV_ID - DATE_ACTION
1 (Петя) - 2 (Айти) - Сегодня
2 (Вася) - 1 (Бухи) - Вчера
-- Тадаааам! Вася умный, его назначили ещё и Senior Developer-ом!
2 (Вася) - 2 (Айти) - Сегодня



Давай, рассказывай, что тут невозможного в текущей структуре БД.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Помогите с запросом
    #39538914
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам(хотите пример - их есть у меня!), но почему
полчаса-то? Держи, болезный:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Staff - ID - Name
1 Петя
2 Вася

SubDiv_REF - ID - Name
1 Бухи
2 Айтишники

STAFF_REF - STAFF_ID - SUBDIV_ID - DATE_ACTION
1 (Петя) - 2 (Айти) - Сегодня
2 (Вася) - 1 (Бухи) - Вчера
-- Тадаааам! Вася умный, его назначили ещё и Senior Developer-ом!
2 (Вася) - 2 (Айти) - Сегодня



Какой хороший пример, он аккуратно игнорирует основное использование этих таблиц: отслеживание перевода сотрудников из одного отдела в другой.
Быдло смотрит и умиляется.

Но однако, чтобы вернуться к практической работе, добавляем ещё одно событие.
Причём событие основное для БД, про которое топик-стартер писал,
а не дополнительное и экзотическое, которое мы с тобой в комментах придумали.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Staff - ID - Name
1 Петя
2 Вася

SubDiv_REF - ID - Name
1 Бухи
2 Айтишники

STAFF_REF - STAFF_ID - SUBDIV_ID - DATE_ACTION
1 (Петя) - 2 (Айти) - Вчера
2 (Вася) - 1 (Бухи) - Позавчера
-- Тадаааам! Вася умный, его назначили ещё и Senior Developer-ом!
2 (Вася) - 2 (Айти) - Вчера
-- Тадаааам! Петя глупый, его вывели из айтишников и перевели - полностью, без совмещения - в бухи!
1 (Петя) - 1 (Бухи) - Сегодня



Ждём-с запрос типа "легко подправить", который отличит ПЕРЕВОД Пети от СОВМЕСТИТЕЛЬСТВА Васи.
Без магических констант, дополнительных столбцов-таблиц и прочего.
...
Рейтинг: 0 / 0
25 сообщений из 94, страница 1 из 4
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Помогите с запросом
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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