1 t-sql sql-server greatest-n-per-group
我有2张桌子.student和student_records.
学生表有S_id并且在student_records中有外键.
加入这些表时,我需要1个学生ID和来自student_records表的前5个记录,用于该学生ID.
__PRE__
1来自学生表,'abc','dedw'等等来自学生表中student_records
还有一个活动字段.如果Active = 1,则显示来自student_records的前5条记录,如果Active = 0,则只有1行的studentid
假设至少SQL Server 2005:
SELECT S_id, SomeColumn
FROM (SELECT s.S_id, sr.SomeColumn,
ROW_NUMBER() OVER (PARTITION BY s.S_id ORDER BY sr.SomeColumn) AS RowNum
FROM student s
LEFT JOIN student_records sr
ON s.S_id = sr.S_id
AND s.Active = 1
) t
WHERE t.RowNum <= 5
Run Code Online (Sandbox Code Playgroud)
这也可以使用CTE编写.
with cteRowNum as (
SELECT s.S_id, sr.SomeColumn,
ROW_NUMBER() OVER (PARTITION BY s.S_id ORDER BY sr.SomeColumn) AS RowNum
FROM student s
LEFT JOIN student_records sr
ON s.S_id = sr.S_id
AND s.Active = 1
)
SELECT S_id, SomeColumn
FROM cteRowNum
WHERE RowNum <= 5
Run Code Online (Sandbox Code Playgroud)