如何在sqlite中的每两个记录之间选择最大值?

时间:2014-03-09 23:40:30

标签: sqlite view filter

我在Sqlite中的表有:

ID  studentID  Name   Lesson TryNo   Degree           
1      1       John     a1     1       23
2      1       John     a1     2       66
3      1       John     b1     1       55
4      1       John     b1     2       null
5      1       John     c1     1       45
6      1       John     c1     2       50
7      2       Sara     a1     1       88
8      2       Sara     a1     2       null
9      2       Sara     b1     1       45
10     2       Sara     b1     2       32
11     2       Sara     c1     1       null
12     2       Sara     c1     2       55

像约翰和萨拉这样的学生有三节课,如果他们在第一次尝试中失败,他们会再次尝试同一课。 我的问题是,我喜欢创建包含每节课最佳学位而不是两度的新视图,因此新视图应显示以下值:

ID  studentID  Name   Lesson TryNo   Degree           

2      1       John     a1     2       66
3      1       John     b1     1       55
6      1       John     c1     2       50

7      2       Sara     a1     1       88
9      2       Sara     b1     1       45
12     2       Sara     c1     2       55

我尝试做2天没有结果,请帮忙吗?

1 个答案:

答案 0 :(得分:0)

使用SQLite 3.7.11或更高版本,只需组合GROUP BY和MAX:

SELECT ID, studentID, Name, Lesson, TryNo, MAX(Degree) AS Degree
FROM MyTable
GROUP BY studentID, Name, Lesson

在早期的SQLite版本中,列IDTryNo无法保证从与MAX相匹配的相同记录中获取其值(并且大多数其他数据库都会出错)。 在这种情况下,您必须查找每个唯一学生/课程组合的最大学位,并使用它来过滤掉其他记录:

SELECT *
FROM MyTable
WHERE ID = (SELECT ID
            FROM MyTable AS T2
            WHERE T2.studentID = MyTable.studentID
              AND T2.Lesson    = MyTable.Lesson
            ORDER BY Degree DESC
            LIMIT 1)