最近发现一个小问题,在以前版本大量迭代中,为了实现各种数据显示,不得不采用分组来显示我们想要的数据,这个数据有什么特点呢?这里大致的分两种,第一种分组取不同数据列满足要求;第二种分组取不同数据且列符合要求的完整数据;,这两种都有一个共同特点:通过分组显示不能分组的列,且保证数据正确,下面我们分别来分析。
第一种分组取不同数据列满足要求:这一类型有一个特点,就是根据相同数据的几列分组,显示不同数据且符合要求的列
实现设想:这里我们通过相同数据列分组,然后对不同列取最大值或者最小值,这个可以按照自己的要求定义,我们这里用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 [月末]