打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
SQL 按时间(年月日)分组获取每组最早第一条记录
declare @WatermeterID int   
declare @BeginTime datetime 
declare @EndTime datetime 
set @WatermeterID=108
set @BeginTime='2016-1-1'
set @EndTime='2018-12-12'

----每年最早第一条读数
select * from 
(select WatermeterID, ReadDatetime, ReadNumber ,ROW_NUMBER() 
over (partition by  WatermeterID,(Datename(year,ReadDatetime))  
order by ReadDatetime) as NEWINDEX
from [Log_Water_WaterMeter])t where t.NEWINDEX =1 
and [WatermeterID] = @WatermeterID and ([ReadDatetime] between @BeginTime and @EndTime ) 
 order by ReadDatetime 

----每月最早第一条读数
select * from 
(select WatermeterID, ReadDatetime, ReadNumber ,ROW_NUMBER() 
over (partition by  WatermeterID,(Datename(year,ReadDatetime)+Datename(month,ReadDatetime))  
order by ReadDatetime) as NEWINDEX
from [Log_Water_WaterMeter])t where t.NEWINDEX =1 
and [WatermeterID] = @WatermeterID and ([ReadDatetime] between @BeginTime and @EndTime ) 
 order by ReadDatetime 

--每天最早第一条读数
 select * from 
(select WatermeterID, ReadDatetime, ReadNumber ,ROW_NUMBER() 
over (partition by  WatermeterID,(Datename(year,ReadDatetime)+Datename(month,ReadDatetime)+Datename(day,ReadDatetime))  
order by ReadDatetime) as NEWINDEX
from [Log_Water_WaterMeter])t where t.NEWINDEX =1 
and [WatermeterID] = @WatermeterID and ([ReadDatetime] between @BeginTime and @EndTime ) 
 order by ReadDatetime 

时间3秒左右
分组分别为年、年月、年月日
分组日期方法采用Datename:
Datename(year,ReadDatetime)+Datename(month,ReadDatetime)+Datename(day,ReadDatetime)

也可以采用CONVERT日期转换,但DateName速度似乎更快
CONVERT:
年:CONVERT(VarChar(4), getdate(), 112)   
年月:CONVERT(VarChar(6), getdate(), 112)   
年月日::CONVERT(VarChar(8), getdate(), 112)   
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
date picker使用
VBA根据日期时间筛选数据
SQL SERVER日期函数详细用法
使用sql语句查询日期在一周内的数据
sql server日期时间函数
在VBA中计算时间差
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服