我希望我的头衔可以,因为我真的不知道怎么称呼它。
无论如何,我有一张包含以下内容的表格:
数据看起来像这样:
1 100 111 31/12/2017
2 101 210 30/12/2017
3 100 112 29/12/2017
4 101 203 27/12/2017
5 100 117 20/12/2017
6 103 425 08/12/2017
要生成此表,我只按日期DESC排序。
是否可以使用每个类别的订单添加新列,如:
1 100|1
2 101|1
3 100|2
4 101|2
5 100|3
6 103|1
最高
答案 0 :(得分:3)
您想要分析函数row_number()
:
select t.*
from (select *, row_number() over (partition by Category order by date desc) Seq
from table
) t
order by id;
答案 1 :(得分:0)
是的,SQL有几个选项供您添加一个列,该列使用基于category和id列的行排名填充。
如果您只想在select语句中添加一列,我建议使用RANK()函数。 在这里查看更多详情: https://docs.microsoft.com/en-us/sql/t-sql/functions/rank-transact-sql?view=sql-server-2017
对于您当前的表,请尝试以下select语句:
SELECT
[ID],
[Category],
[Name],
[DateForName],
RANK() OVER (PARTITION BY [Category] ORDER BY [DateForName] DESC) AS [CategoryOrder]
FROM [TableName]
或者,如果要将永久列(也称为字段)添加到现有表中,我建议将其视为计算列。在这里查看更多信息: https://docs.microsoft.com/en-us/sql/relational-databases/tables/specify-computed-columns-in-a-table?view=sql-server-2017
因为新列完全基于两个预先存在的列而只有这两列。 SQL可以很好地为您维护。
希望这有帮助!