MySQL SELECT DISTINCT ORDER BY问题

标签 mysql sql group-by left-join distinct

首先,我要处理 4 个表。

我有一个 classes 表,它与 sections 表有 1->N 关系,而 sections 表也有 1->N 关系 lessons 表格。

所以从透视的角度来看:

  • 类(class)
    • 部分
      • 类(class)

最后一个表是activityLog,当学生访问类(class)时,使用以下内容记录:

ActivityLog 行 -> actorID(用户 ID)、classID、sectionID、lessonID

我想提取学生访问过的最后 5 节独特类(class)。我尝试同时使用 DISTINCT 和 GROUP BY 但没有成功。

每次都返回相同的记录,而不是他们访问过的最新类(class)。

使用分组方式

SELECT activityLog.actorID, activityLog.activityDate,
        strClasses.classID, strClasses.className,
        strSections.sectionID, strSections.sectionName,
        strLessons.lessonID, strLessons.lessonName

FROM activityLog            
LEFT JOIN strClasses ON strClasses.classID = activityLog.classID
LEFT JOIN strSections ON strSections.sectionID = activityLog.sectionID
LEFT JOIN strLessons ON strLessons.lessonID = activityLog.lessonID
WHERE activityLog.activityTypeID = 6 AND activityLog.actorID = 3
GROUP BY activityLog.lessonID
ORDER BY activityLog.activityDate DESC
LIMIT 5

使用不同的

SELECT DISTINCT activityLog.actorID,
        strClasses.classID, strClasses.className,
        strSections.sectionID, strSections.sectionName,
        strLessons.lessonID, strLessons.lessonName
FROM activityLog            
LEFT JOIN strClasses ON strClasses.classID = activityLog.classID
LEFT JOIN strSections ON strSections.sectionID = activityLog.sectionID
LEFT JOIN strLessons ON strLessons.lessonID = activityLog.lessonID
WHERE activityLog.activityTypeID = 6 AND activityLog.actorID = 3
ORDER BY activityLog.activityDate DESC
LIMIT 5

我不明白为什么没有显示最新的记录。

最佳答案

根据您的变化,这对您来说如何?

SELECT activityLog.actorID, activityLog.activityDate,
        strClasses.classID, strClasses.className,
        strSections.sectionID, strSections.sectionName,
        strLessons.lessonID, strLessons.lessonName
FROM activityLog            
LEFT JOIN strClasses ON strClasses.classID = activityLog.classID
LEFT JOIN strSections ON strSections.sectionID = activityLog.sectionID
LEFT JOIN strLessons ON strLessons.lessonID = activityLog.lessonID
WHERE activityLog.activityTypeID = 6 AND activityLog.actorID = 3
AND activityLog.activityDate = (SELECT MAX(activityDate) FROM activityLog AS lookup WHERE lessonID = activityLog.lessonID)
ORDER BY activityLog.activityDate DESC
LIMIT 5

根据您的描述,我不确定您为什么要使用 LEFT JOIN,但为了以防万一,我还是保留了它。

关于MySQL SELECT DISTINCT ORDER BY问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6708147/

相关文章:

mysql - Zend Framework 2 和 mysql 使用 ssh

PHP MYSQL 分页列出所有字段

mysql - Laravel 表拒绝在迁移表上注册并回滚或迁移

python - Pandas 在两种条件下进行分组

php - mySQL 多个 WHEN 列时的情况

mysql - 仅当值不存在时返回行

sql - 如何只插入一个IDENTITY列插入表(SQL Express)

sql - 字符串或二进制数据将被截断 - 大字符串

mysql - 获取平均日或周值

mysql - 复杂的sql查询 - 无法弄清楚