【问题标题】:SQL OVER based on grouping基于分组的 SQL OVER
【发布时间】:2012-11-13 01:29:07
【问题描述】:

这个很难解释。我正在尝试在我的选择插入新表中执行 Row_Number() Over(Order by PickedDate)。

这适用于生成 1、2、3、4、5、6、7,但这不是我想要做的。我希望为每组水果生成第一行。

例如,我尝试插入以下表结构; ItemOrder int, FruitType nvarchar(100),DatePicked 日期时间,

以下数据

水果类型|采摘日期 苹果|2012 年 10 月 1 日 苹果|2012 年 10 月 3 日 苹果|2012 年 10 月 2 日 李子|9/13/2011 李子|9/14/2011 李子|9/15/2011 樱桃|12/2/2012 樱桃|12/4/2012

我正在尝试得到以下结果

FruitType|DatePicked|ItemOrder 苹果|10/1/2012|1 苹果|10/3/2012|3 苹果|10/2/2012|2 李子|2011/9/13|1 李子|2011/9/14|2 李子|2011/9/15|3 樱桃|12/2/2012|1 樱桃|12/4/2012|2

帮助大家

创建表#FruitStandPicked ( FruitType NVARCHAR (100), 日期选择日期时间 ); 插入#FruitStandPicked(FruitType,DatePicked) 值('Apple','10/1/2012'), (“苹果”,“2012 年 10 月 3 日”), (“苹果”,“2012 年 10 月 2 日”), (“李子”,“2011 年 9 月 13 日”), (“李子”,“2011 年 9 月 14 日”), (“李子”,“2011 年 9 月 15 日”), (“樱桃”,“2012 年 12 月 2 日”), (“樱桃”,“2012 年 12 月 4 日”); 创建表#FruitStandTable ( 项目订单INT, FruitType NVARCHAR (100), 日期选择日期时间 ); --这需要调整 插入#FruitStandTable(ItemOrder、FruitType、DatePicked) SELECT row_number () OVER (ORDER BY fruittype, datepicked), 水果类型, 选择日期 来自#FruitStandPicked; 从#FruitStandTable中选择*; 删除表#FruitStandTable; 删除表#FruitStandPicked;

在下订单的范围内同样有效,但我也需要通过分组来下订单。

提前致谢!

【问题讨论】:

    标签: sql-server-2008


    【解决方案1】:

    您仍然可以将ROW_NUMBERPARTITION 子句一起使用。 试试这个:

    SELECT *, ROW_NUMBER() OVER(PARTITION BY Fruit ORDER BY PickedDate) ItemOrder
      FROM <YOUR-TABLE>
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-19
    • 2017-03-15
    • 1970-01-01
    • 2016-10-08
    • 2012-01-30
    • 2021-07-25
    • 1970-01-01
    相关资源
    最近更新 更多