![](/img/trans.png)
[英]How to find the highest number among 3 pass integer parameters by using stored procedure in SQL Server?
[英]Stored procedure to find Highest Scores in SQL table
+-------+-----------+-------+
| Name | Date | Score |
+-------+-----------+-------+
| Name1 | 1/3/2016 | 80 |
| Name2 | 1/5/2016 | 76 |
| Name3 | 1/29/2016 | 77 |
| Name4 | 1/30/2016 | 40 |
| Name4 | 1/17/2016 | 79 |
| Name5 | 1/1/2016 | 90 |
| Name2 | 1/3/2016 | 79 |
| Name5 | 1/27/2016 | 92 |
| Name2 | 1/27/2016 | 99 |
| Name1 | 1/21/2016 | 93 |
| Name2 | 1/3/2016 | 70 |
| Name1 | 2/15/2016 | 80 |
| Name3 | 3/31/2016 | 84 |
+-------+-----------+-------+
我有此表,需要在给定的时间段内(即在2016年1月1日至2016年1月31日之间)找到每个名称的最高分数,并显示名称,日期和最高分数。
请帮忙! 谢谢-温贝托·戈斯(Humberto Goez)
您将遇到重复行的问题,因为您没有显示主键。 该查询可以工作,但是最好使用主键
当然,这只是SQL ...
SELECT Name, [Date], Score
FROM MyTable T1
WHERE T1.Score = (SELECT MAX(T2.Score)
FROM MyTable T2
WHERE T2.Name = T1.Name)
AND [Date] >= @StartDate
AND [Date] <= @EndDate
如果您使用的是SQL Server
则可以使用:
DECLARE @start_date DATE = '2016-01-01T00:00:00'
,@end_date DATE = '2016-01-31T00:00:00';
SELECT TOP 1 WITH TIES [Name],[Date],[Score]
FROM tab_name t
WHERE [Date] BETWEEN @start_date AND @end_date
ORDER BY RANK() OVER(PARTITION BY Name ORDER BY Score DESC);
CTE是一个很好的方法。 示例查询如下所示:
declare @StartDate datetime = '2016-01-01',
@EndDate datetime = '2016-06-01'
;with scores as (
SELECT Name, [Date], Score,
row_number() over(partition by name /*start over each name*/
order by Score desc /*top first*/,[Date] /*earlier first*/) rn
FROM MyTable
)
select * from scores
where rn = 1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.