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

Mariadb 获取最小(日期)和最大(日期)及其各自的标题,mariadb,groupwise-maximum,Mariadb,Groupwise Maximum,我有三张表要选择 表1有一组关于用户的静态信息,比如他们的ID号、姓名、注册日期 表2显示了用户的ID号、课程号以及他们注册课程的日期 表3列出了课程编号和课程名称 我尝试使用一个查询来选择表1中提到的列,其中包括他们注册的最新课程(名称和日期注册)以及他们注册的第一个课程(名称和日期注册) 这是我想到的 SELECT u.idst, u.userid, u.firstname, u.lastname, u.email, u.register_date, MIN(l.date_insc

我有三张表要选择

表1有一组关于用户的静态信息,比如他们的ID号、姓名、注册日期

表2显示了用户的ID号、课程号以及他们注册课程的日期

表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
这给了我所需要的一切,日期是正确的,但我不知道如何显示这两个课程的名称。最近的和第一次

帮助会很好


谢谢

您可以通过为派生表中的每个用户生成最小/最大
日期\u inscr
,然后将其两次连接到
表2
表3
,一次获得每个课程名称来获得所需结果:

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指出的,使用两个单独的查询更容易做到这一点。

您使用的是MySQL 8.0吗?这可以用完成。为什么需要在一个查询中完成?如果你做两个独立的查询会更容易。@BillKarwin我正在运行一个脚本,它将向超过100000个用户进行api调用,所以我正在尝试对它进行调整down@BillKarwin我正在运行5.5.60-MariaDBI刚刚写了完全相同的查询,然后看到了您的答案。干杯@GMB我讨厌这种情况!:-)是的,如果不刷新,有时其他答案将停止加载。。。很好,很高兴你提供了这个问题,对我来说似乎是正确的方法。@Mat我很高兴我能帮上忙。这些查询可能会很棘手,尽管使用窗口函数会使它们变得更容易。