SQL 查询根据两列对日期进行排序

SQL Query to sort date based on two column

我在 table RATING 中有以下数据,我想根据评级和年份对其进行排序。

数据库 MS SQL 服务器

Table

中的未排序数据
ID  PlayerName  Rating  Year    
1   A   8   2022    
2   B   8   2022
3   C   0   2022
4   A   7   2020
5   B   6   2020
6   C   6   2020
7   E   5   2020
8   D   5   2020
9   D   5   2022

数据应如下所示

ID  PlayerName  Rating  Year
1   A   8   2022
2   B   8   2022
3   D   5   2022
9   C   0   2022
4   A   7   2020
5   B   6   2020
6   C   6   2020
7   E   5   2020
8   D   5   2020

我无法正确使用以下查询

SELECT ID, PlayerName, Rating, Year 
FROM   RATING 
Where Year IN (SELECT Year from Rating) 
order by year DESC

但它没有得到正确的顺序,因为我无法在子查询中使用 order by 子句,因为它会生成错误 The ORDER BY clause is invalid in views, inline functions, derived tables, subqueries, and common table expressions, unless TOP, OFFSET or FOR XML is also specified.

事件两列排序不正常

SELECT ID, PlayerName, Rating, Year 
FROM   RATING 
order by Rating, Year

您可以尝试先 ORDER BY 年 DESC 然后 Rating DESC

SELECT ID, PlayerName, Rating, [Year] 
FROM RATING 
order by [Year] DESC,Rating DESC

Year是sqlserver中的关键字,我会用括号括起来。

到目前为止你的尝试还不错。但是有两件事你需要改变。 第一:排序优先级较高的列是“年份”列,因此必须首先使用它,然后是“评级”列。 第二:必须加上关键字“DESC”,以最新的年份和最高的排名开头。 所以你的查询应该是这个:

SELECT * FROM rating ORDER BY year DESC, rating DESC;

你可以看到它在这里工作:db<>fiddle

如果您可以重命名数据库中的列,我建议不要使用 SQL 关键字作为列名(在您的示例中,这是“年”列)并且不要使用列名与 table 名称相同(在您的情况下,您可以将 table“rating”重命名为“ratings”或类似名称)。 这两者当然都是可能的,但有时可能会不好读,并增加出现问题的风险。