如何使用SQL对数据表中各项目的日期字段进行排名?
问题分析与修正方案
原SQL存在的问题
SELECT TOP语法错误:TOP后必须指定返回行数(如TOP 100),若不需要限制行数则直接去掉TOP- 字段名不匹配:你的表结构中项目字段是
Project,日期字段是Date,但SQL中错误使用了Project_Name和End_Date - 语法缺失:
[Project]后缺少逗号,导致字段分隔错误
修正后的SQL语句
如果不需要限制返回行数,使用以下语句:
SELECT [Date], [Project], RANK() OVER(PARTITION BY [Project] ORDER BY [Date] ASC) AS Rank FROM Table_Name
如果需要限制返回行数(例如前100条),则添加TOP:
SELECT TOP 100 [Date], [Project], RANK() OVER(PARTITION BY [Project] ORDER BY [Date] ASC) AS Rank FROM Table_Name
说明
PARTITION BY [Project]:按项目名称分组,对每个项目单独计算排名ORDER BY [Date] ASC:按日期升序排列,实现同项目内日期从早到晚的排名逻辑RANK()函数会为同项目内的记录分配排名,若存在相同日期会得到相同排名,后续排名会跳过对应数量的位次(若需要连续无跳跃的排名,可改用ROW_NUMBER()函数)
内容的提问来源于stack exchange,提问作者Ajit Sahoo
相关产品推荐
相关产品推荐

