Получение мин (дата) И макс (дата) И их соответствующие названия - PullRequest
0 голосов
/ 06 марта 2020

У меня есть три таблицы, которые я бы хотел выбрать из

В таблице 1 есть куча статистических данных c о пользователе, таких как его номер, имя, дата регистрации

Таблица 2 имеет идентификационный номер пользователя, номер курса и дату, которую он зарегистрировал для курса

В таблице 3 указан номер курса и название курса

Я пытаюсь использовать один запрос он выберет столбцы, упомянутые в таблице 1, с последним зарегистрированным курсом (зарегистрированное имя и дата), а также с первым зарегистрированным курсом (зарегистрированное имя и дата)

Вот что я придумал

SELECT u.idst, u.userid, u.firstname, u.lastname, u.email, u.register_date, 
    MIN(l.date_inscr) as mindate, MAX(l.date_inscr) as maxdate, lc.coursename
FROM table1 u,table3 lc
LEFT JOIN table2 l
ON l.idCourse = lc.idCourse
WHERE u.idst = 12787
AND u.idst = l.idUser

И это дает мне все, что мне нужно, и даты верны, но я не знаю, как отобразить ОБА названия курсов. Самая свежая и первая.

И помощь будет отличной.

Спасибо !!!

1 Ответ

2 голосов
/ 06 марта 2020

Вы можете получить желаемые результаты, сгенерировав min / max date_inscr для каждого пользователя в производной таблице, а затем соединив его дважды с table2 и table3, один раз, чтобы получить название каждого курса:

SELECT u.idst, u.userid, u.firstname, u.lastname, u.email, u.register_date,
       l.mindate, lc1.coursename as first_course,
       l.maxdate, lc2.coursename as latest_course
FROM table1 u
LEFT JOIN (SELECT idUser, MIN(date_inscr) AS mindate, MAX(date_inscr) AS maxdate
           FROM table2
           WHERE idUser = 12787
          ) l ON l.idUser = u.idst
LEFT JOIN table2 l1 ON l1.idUser = l.idUser AND l1.date_inscr = l.mindate
LEFT JOIN table3 lc1 ON lc1.idCourse = l1.idCourse
LEFT JOIN table2 l2 ON l2.idUser = l.idUser AND l2.date_inscr = l.maxdate
LEFT JOIN table3 lc2 ON lc2.idCourse = l2.idCourse

Как указал @BillKarwin, это проще сделать с помощью двух отдельных запросов.

...