如何对日期字段进行排名?

问题描述 投票:0回答:1

我的桌子是这样的:

项目 日期
EO124 2023年7月25日
E0124 2023年8月1日
EO124 10-05-2023
EO124 2023年10月12日
EO124 2023年10月11日
EO124 2023年11月17日
EO124 12-01-2023

在我的表中,还有多个项目名称和其他字段。我的要求是按升序排列所有项目的结束日期。

我尝试过这样但失败了。

SELECT TOP  
  [Date],
  [Project]
  RANK() OVER(PARTITION BY [Project_Name] ORDER BY [End_Date]asc) Rank
FROM Table_Name
sql rank
1个回答
0
投票

我尝试过这样但失败了。

这样的描述根本没有给我们任何信息。 第一个“失败”(如评论中指出的)是错误“‘日期’附近的语法不正确”。 - 因为您在

TOP
之后没有提供号码。通常像这样的家庭作业问题会需要“排名最高的项目”,并且您会使用
TOP 1
但我现在会使用
TOP 100
- 很快就会使用。

您的下一个“失败”(也在评论中指出)是错误“')'附近的语法不正确。” - 因为你错过了[Project]之后/RANK之前的逗号。

RANK
的结果本质上是结果中的一列,并且需要位于要返回的列列表中。列表中的项目以逗号分隔。

下一个“失败”是两条消息 - “无效的列名“Project_Name”。”和“无效的列名‘End_Date’。”。这些都在您的

OVER
子句中。您在示例中没有向我们提供这些列。我以为你的意思是[项目]和[日期],这给了我看起来像这样的代码
RANK

生成结果

SELECT TOP 100 [Date], [Project], RANK() OVER (PARTITION BY [Project] ORDER BY [Date] asc) [Rank] FROM Table_Name

这让我回到
Date Project Rank 2023-08-01 E0124 1 2023-07-25 EO124 1 2023-10-05 EO124 2 2023-10-12 EO124 3 2023-11-10 EO124 4 2023-11-17 EO124 5 2023-12-01 EO124 6

之后的数字 - 请注意,有超过 1 行的排名为“1” - 这是因为您在第二个数据项中使用 0 而不是 O 的输入错误。一旦您更正,您可以使用

TOP
但这不考虑多个项目。因此,您想要的是一个子查询(或表变量、临时表或 CTE),您可以使用
TOP 1
子句进行过滤,例如
WHERE

© www.soinside.com 2019 - 2024. All rights reserved.