Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.05.2022, 05:57   #1
Black King
Новичок
Пользователь
 
Регистрация: 31.05.2022
Сообщений: 11
По умолчанию Помогите составить запрос

Здравствуйте! Нужно составить запрос в бд на последнего нанятого сотрудника у каждого начальника.
Если position_id меньше 10 то это начальник определённого отдела, а если выше то это просто сотрудник отдела. ПАМАГИТЕ Я 5 ЧАСОВ НЕ МОГУ ЕГО СДЕЛАТЬ Я АДУ!
Изображения
Тип файла: jpg Аннотация 2022-05-31 094524.jpg (119.0 Кб, 0 просмотров)
Black King вне форума Ответить с цитированием
Старый 31.05.2022, 07:03   #2
Black King
Новичок
Пользователь
 
Регистрация: 31.05.2022
Сообщений: 11
По умолчанию

Начал разбивать задание на подзапросы

Но только он выводит не самые новые значения из таблицы
Изображения
Тип файла: jpg Аннотация 2022-05-31 110150.jpg (16.1 Кб, 1 просмотров)
Black King вне форума Ответить с цитированием
Старый 31.05.2022, 07:06   #3
Black King
Новичок
Пользователь
 
Регистрация: 31.05.2022
Сообщений: 11
По умолчанию

Изображения
Тип файла: jpg tgw.jpg (84.8 Кб, 16 просмотров)
Black King вне форума Ответить с цитированием
Старый 31.05.2022, 08:35   #4
Valick
Форумчанин
 
Регистрация: 27.04.2022
Сообщений: 493
По умолчанию

А структуру таблицы кто придумал?
SELECT fup.user_id AS boss_id,
up.user_id,
up.department_id,
MAX(up.created_at) AS created_at
FROM user_position AS up
LEFT JOIN (SELECT user_id, department_id
FROM user_position WHERE position_id < 10) AS fup ON up.department_id = fup.department_id
WHERE up.user_id >= 10
GROUP BY up.department_id
user_id = 10 это начальник или сотрудник?

Последний раз редактировалось Valick; 31.05.2022 в 08:53.
Valick вне форума Ответить с цитированием
Старый 31.05.2022, 08:43   #5
Black King
Новичок
Пользователь
 
Регистрация: 31.05.2022
Сообщений: 11
По умолчанию

Тот кто мне дал это задание.
Black King вне форума Ответить с цитированием
Старый 31.05.2022, 09:00   #6
Black King
Новичок
Пользователь
 
Регистрация: 31.05.2022
Сообщений: 11
По умолчанию

Valick,
У меня выдало вот такую ошибку:
Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'fup.user_id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
Black King вне форума Ответить с цитированием
Старый 31.05.2022, 09:15   #7
Valick
Форумчанин
 
Регистрация: 27.04.2022
Сообщений: 493
По умолчанию

Согласен, но со смартфона не удобно запросы писать.

Код:
SELECT fup.user_id AS boss_id,
up.department_id,
MAX(up.user_id) AS user_id
FROM user_position AS up
LEFT JOIN (SELECT user_id, department_id
FROM user_position WHERE position_id < 10) AS fup ON up.department_id = fup.department_id
WHERE up.user_id >= 10
GROUP BY up.department_id
если нужна еще и дата, то попробуй так

Код:
SELECT fup.user_id AS boss_id,
up.department_id,
MAX(up.user_id) AS employee_user_id
(SELECT created_at FROM user_position WHERE user_id = employee_user_id) AS created_at
FROM user_position AS up
LEFT JOIN (SELECT user_id, department_id
FROM user_position WHERE position_id < 10) AS fup ON up.department_id = fup.department_id
WHERE up.user_id >= 10
GROUP BY up.department_id

Последний раз редактировалось Valick; 31.05.2022 в 09:19.
Valick вне форума Ответить с цитированием
Старый 31.05.2022, 09:20   #8
Black King
Новичок
Пользователь
 
Регистрация: 31.05.2022
Сообщений: 11
По умолчанию

Valick,
А что вы имеете в виду когда пишете up и fup? Если это отдельные таблицы, то хочу огорчить тут одна таблица, где все начальники и рабочие в ней одной, а различить их можно по possition_id. У начальников possition_id не больше 9
Black King вне форума Ответить с цитированием
Старый 31.05.2022, 09:31   #9
Valick
Форумчанин
 
Регистрация: 27.04.2022
Сообщений: 493
По умолчанию

Цитата:
Сообщение от Black King Посмотреть сообщение
то хочу огорчить тут одна таблица,
Во первых я знаю, во вторых я бы не огорчился даже если бы не знал , а в третьих прочитайте что такое alias и почему без них нельзя джойнить таблицу саму к себе.
Ну и fup это не просто alias таблицы, это alias результата выборки из таблицы.

Последний раз редактировалось Valick; 31.05.2022 в 09:33.
Valick вне форума Ответить с цитированием
Старый 31.05.2022, 09:35   #10
Black King
Новичок
Пользователь
 
Регистрация: 31.05.2022
Сообщений: 11
По умолчанию

Valick,
Я прочитал. Выдаётся ошибка если использовать запрос с датой: Ссылка 'employee_user_id' не поддерживается (reference to group function)

Последний раз редактировалось Black King; 31.05.2022 в 09:40.
Black King вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите составить запрос int1bh SQL, базы данных 0 27.07.2021 14:52
Помогите составить запрос alexmansb SQL, базы данных 2 30.12.2020 08:24
Помогите составить SQL запрос DarknessLORD11 Помощь студентам 3 24.12.2015 06:35
помогите составить SQL запрос!!!! MAKSA БД в Delphi 12 07.08.2009 11:12
Помогите составить запрос или перепроектировать БД Neurotechnic БД в Delphi 1 27.07.2009 10:51