用于分组月度周期范围的SQL查询
发布时间:2020-12-12 08:41:18 所属栏目:MsSql教程 来源:网络整理
导读:我建立一个查询时遇到麻烦,根据每个月的不同时间,我的项目将按月份分组.我正在使用PostgreSQL. 例如,我有一个数据表,如下所示: Name Period(text)Ana 2010/09Ana 2010/10Ana 2010/11Ana 2010/12Ana 2011/01Ana 2011/02Peter 2009/05Peter 2009/06Peter 2009/
我建立一个查询时遇到麻烦,根据每个月的不同时间,我的项目将按月份分组.我正在使用PostgreSQL.
例如,我有一个数据表,如下所示: Name Period(text) Ana 2010/09 Ana 2010/10 Ana 2010/11 Ana 2010/12 Ana 2011/01 Ana 2011/02 Peter 2009/05 Peter 2009/06 Peter 2009/07 Peter 2009/08 Peter 2009/12 Peter 2010/01 Peter 2010/02 Peter 2010/03 John 2009/05 John 2009/06 John 2009/09 John 2009/11 John 2009/12 我希望结果查询是这样的: Name Start End Ana 2010/09 2011/02 Peter 2009/05 2009/08 Peter 2009/12 2010/03 John 2009/05 2009/06 John 2009/09 2009/09 John 2009/11 2009/12 有没有办法实现这一点? 解决方法这是一个聚合问题,但有一个扭曲 – 您需要为每个名称定义相邻月份的组.假设这个月份对于一个给定的名字永远不会出现多次,你可以通过在每个期间分配一个“月”号,并减去一个序号.这些值将是连续数月的常数. select name,min(period),max(period) from (select t.*,(cast(left(period,4) as int) * 12 + cast(right(period,2) as int) - row_number() over (partition by name order by period) ) as grp from names t ) t group by grp,name; Here是一个SQL小提琴,说明了这一点. 注意:重复也不是一个问题.你会jsut使用dense_rank()而不是row_number(). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |