感谢您查看我的问题。
我希望它能够返回排名,并根据“日期”,“组”,“销售计数”进行排名,因此它可以给出前3的排名。例如,2014年1月1日约翰在“BIGGroup1A”中因此,产品10中的等级为1,产品7中的等级为2.在2014年1月1日的同一天,他在两个不同的组中出售55和55,因此它们都应该是1.我填写了其余的排名与我追求的逻辑相匹配。
mytable是
Date Name Group ProductName SellCount
1/2/2014 John BigGroup1A Product7 10
1/2/2014 John BigGroup1A Product10 100
1/2/2014 John BigGroup1B Product2 55
1/2/2014 John Group1A Product1 55
1/3/2014 John Group1B Product6 5
1/3/2014 John Group1C Product9 44
1/3/2014 John Group1C Product4 55
1/3/2014 John LargeGroup1A Product5 77
1/4/2014 John LargeGroup2A Product8 25
1/5/2014 John LargeGroup2B Product12 660
1/6/2014 John MediumGroup2A Product11 50
1/7/2014 John MediumGroup2A Product3 55
我希望结果是:
Date Name Group ProductName SellCount Rank
1/2/2014 John BigGroup1A Product7 10 2
1/2/2014 John BigGroup1A Product10 100 1
1/2/2014 John BigGroup1B Product2 55 1
1/2/2014 John Group1A Product1 55 1
1/3/2014 John Group1B Product6 5 1
1/3/2014 John Group1C Product9 44 2
1/3/2014 John Group1C Product4 55 1
1/3/2014 John LargeGroup1A Product5 77 1
1/4/2014 John LargeGroup2A Product8 25 1
1/5/2014 John LargeGroup2B Product12 660 1
1/6/2014 John MediumGroup2A Product11 50 1
1/7/2014 John MediumGroup2A Product3 55 1
我很欣赏sql中的解决方案,我是新手,希望每个人都可以提供帮助。
答案 0 :(得分:1)
您应该可以使用rank()
窗口函数,如下所示:
select * from (
select
*,
rank = rank() over (partition by date, [group] order by date, [group], sellcount desc)
from table1
) t
where rank <= 3
内部查询根据您的规范为每行分配排名,并使用排名&gt;的外部查询过滤器行。 3。
有关示例,请参阅this SQL Fiddle。
答案 1 :(得分:0)
您可以使用RANK()
来实现您的目标。
Select *,
RANK() OVER (PARTITION BY DATE,GROUP ORDER BY SELLCOUNT)AS RANK
from Table T
PARTITION BY
将结果集划分为基于DATE
和GROUP.ORDER BY
的组,确保排名基于创建的组中的SELLCOUNT
。