获取最小(日期)和最大(日期)及其各自的标题
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 所指出的,使用两个单独的查询更容易完成。
我有三个 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 所指出的,使用两个单独的查询更容易完成。