SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 21.04.2021 15:39:26

Miromac
Участник
Зарегистрирован: 21.04.2021
Сообщений: 2

Помогите составить запрос.

Помогите пожалуйста.
Я думаю задача для вас будет легкой, но я пока не могу справиться с ней.

Есть 2 таблицы. Таблица deal содержит ID продукта и его название, а таблица dealevent содержит
название события, которое произошло в определенную дату.

Необходимо вывести все названия продуктов (Product_name) у которых текущий статус "Есть долг".

CREATE TABLE deal(
nk INT PRIMARY KEY AUTO_INCREMENT,
product_name VARCHAR(50)
);

CREATE TABLE dealevent(
deal_nk INT,
eventtype VARCHAR(50),
event_time DATE
);

INSERT INTO dealevent (deal_nk, eventtype, event_time)
VALUES ('1','Есть долг', '2020-11-10'),
('1','Долг погашен', '2020-12-12'),
('2','Есть долг', '2020-09-09'),
('3','Закрыт', '2020-12-20'),
('4','Закрыт', '2020-09-09');

INSERT INTO deal (product_name)
VALUES ('Займ 1'), ('Займ 2'), ('Займ 3'), ('Займ 4'), ('Займ 5');

Данные таблицы придумал сам.
Решение данной задачи должно мне помочь в решении, совсем другой, более сложной задачи.

Неактивен

 

#2 21.04.2021 16:01:28

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Помогите составить запрос.

Если deal_nk равен nk из таблицы deal, то
для каждого deal_nk определяете eventtype, соответствующий последней дате (см https://sqlinfo.ru/articles/info/18.html
), если eventtype = "Есть долг", то это нужный вам deal_nk
далее JOIN deal для получения product_name

Неактивен

 

#3 21.04.2021 17:18:01

Miromac
Участник
Зарегистрирован: 21.04.2021
Сообщений: 2

Re: Помогите составить запрос.

Большое спасибо! Добрый человек)
Несколько дней ломал голову, как это сделать. В итоге по предоставленной ссылке нашел для себя нужную информацию.
Я не знал что в условии соединения можно через AND прописывать несколько условий...

SELECT product_name
FROM dealevent d
    JOIN (SELECT deal_nk, MAX(event_time) as mtime FROM dealevent GROUP BY deal_nk) de
        ON d.deal_nk = de.deal_nk AND d.event_time = de.mtime
    JOIN deal
        ON deal.nk = d.deal_nk
WHERE eventtype = 'Есть долг';

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson