【问题标题】:t-sql re-rank when group field changest-sql 在组字段更改时重新排名
【发布时间】:2016-03-29 17:31:25
【问题描述】:

我被困住了!我正在尝试创建一个在组字段更改时再次从 1 开始的计数器:

这就是我想要得到的:

 ProdID  Date    counter
    123 1/1/2016    1
    123 1/2/2016    2
    123 1/3/2016    3
    123 1/4/2016    4
    456 1/1/2016    1
    456 1/2/2016    2
    789 1/1/2016    1
    789 1/2/2016    2
    789 1/3/2016    3
    789 1/4/2016    4
    789 1/5/2016    5

当我使用rank() 及以上时,prodid 更改时不会重置吗?

【问题讨论】:

标签: sql tsql sql-server-2012


【解决方案1】:

如果您只是想选择数据,那么这应该会给您这些结果:

SELECT
    ProdID,
    [Date],    -- A poor name for a column, since it's not only a reserved word, but also not at all descriptive
    ROW_NUMBER() OVER (PARTITION BY ProdID ORDER BY [Date]) AS counter
FROM
    My_Table

PARTITION BY 告诉 SQL Server 您希望 ROW_NUMBER 窗口函数的窗口由 ProdID 分区。想象一下通过ProdID 将您的数据分组。 ORDER BY 告诉它在应用函数之前按Date 对每个窗口内的数据进行排序。

【讨论】:

  • 感谢 Tom,在尝试使用 Rank() 时遇到了困难。以上工作完美。
【解决方案2】:

你试过了吗?

   SELECT  ProdId,Date, ROW_NUMBER() OVER 
        (PARTITION BY ProdID ORDER BY Date DESC) 
        AS Counter  from table
        order by Date ASC

【讨论】:

    猜你喜欢
    • 2012-11-04
    • 2018-02-28
    • 2011-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-03
    • 2015-07-10
    • 2013-12-09
    相关资源
    最近更新 更多