我正在尝试进行此查询.这就是我所拥有的.
我的表是:表
StudyID FacultyID Year Access1 Access2 Access3
1 1 2014 4 8 5
1 2 2014 8 4 7
1 1 2013 5 4 4
2 3 2014 4 6 5
2 5 2013 5 8 10
2 4 2014 5 5 7
3 7 2013 9 4 7
Run Code Online (Sandbox Code Playgroud)
我想按StudyID和Year分组并获取每个字段Access1 Access2和Access3的最小值并仅显示去年,我的意思是每个组的第一行.这是结果.
StudyID Year Access1 Access2 Access3
1 2014 4 4 5
2 2014 4 5 5
3 2013 9 4 7
Run Code Online (Sandbox Code Playgroud)
这是我的查询:
SELECT DISTINCT T.StudyID, T.Year, MIN(T.Access1), MIN(T.Access2), MIN(T.Access3)
FROM T
GROUP BY T.StudyID, T.Year
ORDER BY T.StudyID, T.Year DESC
Run Code Online (Sandbox Code Playgroud)
我也试过这个.
;WITH MyQuery AS ( SELECT DISTINCT T.StudyID, T.Year, MIN(T.Access1), MIN(T.Access2), MIN(T.Access3),ROW_NUMBER() OVER (PARTITION BY T.StudyID, T.Year ORDER BY T.StudyID, T.Year DESC) AS rownumber
FROM T GROUP BY T.StudyID, T.Year ORDER BY T.StudyID , T.Year DESC ) SELECT * FROM MyQuery WHERE rownumber = 1
Run Code Online (Sandbox Code Playgroud)
任何成功,我知道我错过了什么...但不知道是什么?提前致谢!!!!
您可以GROUP BY StudyID, Year在外部查询中选择每个StudyID, Year组中的第一行:
SELECT StudyID, Year, minAccess1, minAccess2, minAccess3
FROM (
SELECT StudyID, Year, min(Access1) minAccess1, min(Access2) minAccess2,
min(Access3) minAccess3,
ROW_NUMBER() OVER (PARTITION BY StudyID ORDER BY Year DESC) AS rn
FROM mytable
GROUP BY StudyID, Year ) t
WHERE t.rn = 1
Run Code Online (Sandbox Code Playgroud)
ROW_NUMBER用于StudyID根据Year值为每个组分配订购号.具有最大值的行Year被分配a rn = 1.
| 归档时间: |
|
| 查看次数: |
11150 次 |
| 最近记录: |