【发布时间】:2015-03-23 00:56:45
【问题描述】:
我正在尝试从如下所示的数据库表结果中选择前 2 条记录
SubjectId | StudentId | Levelid | total
------------------------------------------
1 | 1 | 1 | 89
1 | 2 | 1 | 77
1 | 3 | 1 | 61
2 | 4 | 1 | 60
2 | 5 | 1 | 55
2 | 6 | 1 | 45
我试过这个查询
SELECT rv.subjectid,
rv.total,
rv.Studentid,
rv.levelid
FROM ResultView rv
LEFT JOIN ResultView rv2
ON ( rv.subjectid = rv2.subjectid
AND
rv.total <= rv2.total )
GROUP BY rv.subjectid,
rv.total,
rv.Studentid
HAVING COUNT( * ) <= 2
order by rv.subjectid desc
但有些主题,例如缺少的地方,我什至尝试了以下链接的建议
How to select the first N rows of each group?
但我得到的每个 subjectid 多于两个
我做错了什么?
【问题讨论】:
-
HAVING COUNT( * ) <= 3过滤掉任何包含 3 行或更多行的组。但是您并不是要排除整个组,而是要排除第二组之后的任何行。 -
HAVING COUNT( * ) <= 3是错字,已更正 -
如果您提供所需输出的示例,则更容易提供答案。
标签: sql sqlite greatest-n-per-group