首页 > 数据库技术 > 详细

SQL技巧->当两次排序的分组和排序规则不同的时候

时间:2019-05-09 19:22:32      阅读:465      评论:0      收藏:0      [点我收藏+]

如果有这样一个需求

求股票每年最高价格中的最低价格

应该怎么做呢

 1 drop table if exists #a
 2 create table #a (symbol varchar(10),price int,tdate varchar(10))
 3 insert into #a 
 4 (symbol,price,tdate) -- 该行可以省略 因为values是全部依次对应的
 5 values
 6 (001,15,20180301),
 7 (001,17,20180501),
 8 (001,12,20190601),
 9 (001,14,20190801),
10 (002,20,20180301),
11 (002,25,20180501),
12 (002,22,20190601),
13 (002,24,20190801)
14 
15 select * from #a
16 select symbol,price,tdate from(
17     select * ,rn2=row_number()over(partition by symbol order by price asc) -- 外层第二次排序
18     from
19     (
20         select * from -- 内层第一次排序
21         (
22             select * ,rn1=row_number()over(partition by symbol,left(tdate,4) order by price desc) from #a
23         )a where rn1=1
24     )a
25 )a where rn2=1
26     
27 drop table #a

结果如下图

技术分享图片

 

内层排序的分组依据是symbol和年份(tdate的前四位)

结果是每只代码每年的最高价格

内层排序后的结果

技术分享图片

然后进行外层排序 这时候的分组依据是symbol

结果是每只代码每年最高价格中的最低价格

这个思路适用于每次分组和排序的规则不同的时候

只是提供一个通用的思路 实际问题并不会这么简单

谢谢!

 

SQL技巧->当两次排序的分组和排序规则不同的时候

原文:https://www.cnblogs.com/chendongblog/p/10839927.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!