思路:要取到整点数据,首先想到了是利用数据里面的时间整点部分进行分组,通过时间正序,取到分钟第一条数据就行了
1,简单的group by 做法就比较复杂了,复杂的分组做法都采用了partition by 分区函数处理,好处是不影响原有数据行数
上代码直接看效果
select * from
(
select mmd.[CreateTime] ,
datepart(HOUR,mmd.[CreateTime]) as 整点,
ROW_NUMBER() over(partition by datepart(HOUR,mmd.[CreateTime]) order by mmd.[CreateTime] ) as rn
from [YY2FSC].[dbo].[tb_mmdcly_detection] mmd
where mmd.CreateTime >='2023-05-15 00:00:00' and mmd.CreateTime <= '2023-05-15 23:59:59'
)
as t where t.rn=1 order by t.CreateTime
效果:
常用的函数:
row_number() over(partition by … order by …)
rank() over(partition by … order by …)
dense_rank() over(partition by … order by …)
count() over(partition by … order by …) 求分组后的总数
max() over(partition by … order by …) 求分组后的最大值
min() over(partition by … order by …) 求分组后的最小值
sum() over(partition by … order by …) 求分组后的总和
avg() over(partition by … order by …) 求分组后的平均值
first_value() over(partition by … order by …) 求分组后的第一个值
last_value() over(partition by … order by …) 求分组后的最后一个值
lag() over(partition by … order by …) 取出分组后前n行数据
lead() over(partition by … order by …) 取出分组后后n行数据
可以看到,一天是取到了24条数据,而且行号rn等于1取到了按小时分区的第一条数据,时间给的是一天的,改为A天的就是 24*A数据,比较简单,记录一下!