1,取出所有日期中订单最大金额的前三名
SELECT * FROM (
SELECT CONVERT(VARCHAR(10),bo.OrderDate,120) date1, orderno,amount,
ROW_NUMBER() OVER(ORDER BY bo.amount desc) AS numbers
FROM bdOrder bo(NOLOCK)
WHERE bo.OrderDate >='2011-03-19'
)m
WHERE m.numbers <=3
2,若想取出每日的前三名,就需要对数据进行按日期分组,不能用GROUP BY ,因为OVER中有amount,必须要在GROUP BY 中加上amount,也有失去了分组的意向。
方法:在行级分组,利用强大的OVER,在行级对日期进行分组
SELECT * FROM (
SELECT CONVERT(VARCHAR(10),bo.OrderDate,120) date1, orderno,amount,
ROW_NUMBER() OVER(PARTITION BY CONVERT(VARCHAR(10),bo.OrderDate,120) ORDER BY bo.amount desc) AS numbers
FROM bdOrder bo(NOLOCK)
WHERE bo.OrderDate >='2011-03-19'
)m
WHERE m.numbers <=3
【版权声明】
本站部分内容来源于互联网,本站不拥有所有权,不承担相关法律责任。如果发现本站有侵权的内容,欢迎发送邮件至masing@13sy.com 举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。
上一篇: 字符串字段每一位上类型的判断
下一篇: 子查询字段的来源