获取最小(日期)和最大(日期)及其各自的标题

Getting a min(date) AND max(date) AND their respective titles

我有三个 table 想要 select 来自

Table 1 有一堆关于用户的静态信息,比如他们的身份证号码、姓名、注册日期

Table 2 有用户的 ID 号、课程号和他们注册课程的日期

Table 3 有课程编号,以及课程名称

我正在尝试使用一个查询,该查询将 select table 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

这给了我所需的一切,日期是正确的,但我不知道如何显示这两个课程的名称。最近的也是第一个。

帮助会很大。

谢谢!!!

您可以通过在派生的 table 中为每个用户生成 min/max date_inscr 然后将其加入 table2 和 [=13] 两次来获得您想要的结果=], 一次获取每个课程名称:

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 所指出的,使用两个单独的查询更容易完成。