Cav*_*rob 2 sql t-sql sql-server greatest-n-per-group
我有一个包含各个学期记录的表格,我想要一个查询来选择每个学期的前5行.
我想要一个按键字段(序列)排序的结果集和一个在每个学期内随机排序的结果集.
该表如下所示:
表数据:
Semester|Serial|NewSerial
SP10 |1 |1001
SP10 |2 |1002
SP10 |3 |1003
SP10 |4 |1004
SP10 |5 |1005
SP10 |6 |1006
SP10 |7 |1007
SP10 |8 |1008
SP10 |9 |1009
SP10 |10 |1010
FA10 |1 |2001
FA10 |2 |2002
FA10 |3 |2003
FA10 |4 |2004
FA10 |5 |2005
FA10 |6 |2006
FA10 |7 |2007
FA10 |8 |2008
FA10 |9 |2009
FA10 |10 |2010
FA09 |1 |3001
FA09 |2 |3002
FA09 |3 |3003
FA09 |4 |3004
FA09 |5 |3005
FA09 |6 |3006
FA09 |7 |3007
FA09 |8 |3008
FA09 |9 |3009
FA09 |10 |3010
Run Code Online (Sandbox Code Playgroud)
结果1:按序列排序,前5名
Semester|Serial|NewSerial
SP10 |1 |1001
SP10 |2 |1002
SP10 |3 |1003
SP10 |4 |1004
SP10 |5 |1005
FA10 |1 |2001
FA10 |2 |2002
FA10 |3 |2003
FA10 |4 |2004
FA10 |5 |2005
FA09 |1 |3001
FA09 |2 |3002
FA09 |3 |3003
FA09 |4 |3004
FA09 |5 |3005
Run Code Online (Sandbox Code Playgroud)
结果2:学期内随机排序(抽样)
Semester|Serial|NewSerial
SP10 |3 |1003
SP10 |1 |1001
SP10 |5 |1005
SP10 |2 |1002
SP10 |4 |1004
FA10 |2 |2002
FA10 |1 |2001
FA10 |4 |2004
FA10 |3 |2003
FA10 |5 |2005
FA09 |3 |3003
FA09 |1 |3001
FA09 |2 |3002
FA09 |5 |3005
FA09 |4 |3004
Run Code Online (Sandbox Code Playgroud)
这些应该这样做:
WITH [query_semester] AS (
SELECT RN = ROW_NUMBER() OVER (PARTITION BY semester
ORDER BY serial),
serial, semester, grade
FROM SemesterTable)
SELECT serial, semester, grade
FROM [query_semester] WHERE [RN] <= 5;
Run Code Online (Sandbox Code Playgroud)
和随机的:
WITH [query_semester] AS (
SELECT RN = ROW_NUMBER() OVER (PARTITION BY semester
ORDER BY NEWID()),
serial, semester, grade
FROM SemesterTable)
SELECT serial, semester, grade
FROM [query_semester] WHERE [RN] <= 5;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
831 次 |
| 最近记录: |