SqlServer分组取一瓢和月初月末

最近发现一个小问题,在以前版本大量迭代中,为了实现各种数据显示,不得不采用分组来显示我们想要的数据,这个数据有什么特点呢?这里大致的分两种,第一种分组取不同数据列满足要求;第二种分组取不同数据且列符合要求的完整数据;,这两种都有一个共同特点:通过分组显示不能分组的列,且保证数据正确,下面我们分别来分析。

第一种分组取不同数据列满足要求这一类型有一个特点,就是根据相同数据的几列分组,显示不同数据且符合要求的列

实现设想:这里我们通过相同数据列分组,然后对不同列取最大值或者最小值,这个可以按照自己的要求定义,我们这里用max去实现

select * from tb 

select name,max(years)as years from tb group by name


第二种分组取不同数据且列符合要求的完整数据:有的时候我们想通过几列分组,然后查看所有的数据

实现设想:我们先通过一个排序或者说一个规则去获取到row_number(),然后再通过相同列获取规则的最大row_number或者最小row_number,这时候我们要的规则数据到手,然后就是显示所有列数据完整,通过之前的规则自关联我们这个规则数据,就能够获取到我们想要的结果

select * from tb 


select tb3.* from
(select name,min(rowId) as  rowId from (select *,ROW_NUMBER()over(order by name)as rowId from tb ) as tb1 group by name) as tb2 
inner join 
(select *,ROW_NUMBER()over(order by name)as rowId from tb)as tb3 on tb2.rowId = tb3.rowId

最后总结:数据库基础不算多,最主要 还是灵活运用。最后送上怎么获取当月的第一天和当月的最后一天的实现

SELECT Convert(varchar(10),dateadd(dd,-datepart(dd,getdate())+1,getdate()) ,23) as [月初]
 
SELECT Convert(varchar(10),dateadd(day,-day(getdate()),dateadd(month,1,getdate())),23) as [月末]

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值