打开APP
userphoto
未登录

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

开通VIP
SQL Union获取符合条件的第一条和最后一条记录
declare @BuildingID int  
declare @TimeUnit int  
declare @BeginTime datetime 
declare @EndTime datetime 
set @BuildingID=1
set @BeginTime='2018-1-1'
set @EndTime='2018-8-10'
select GETDATE()

select * from (
    SELECT   A.[ID]
      ,A.[WatermeterID]
      ,A.[ReadTime]
      ,A.[ReadNumber]* dbo.Func_GetSignByBit(C.[IsIn]) as [ReadNumber] 
FROM [Log_Watermeter] A 
inner join (select [WatermeterID],min([ReadTime]) as [ReadTime] from [Log_Watermeter] 
where  [ReadTime]>=@BeginTime group by WatermeterID) B 
on A.[WatermeterID]=B.[WatermeterID] and A.[ReadTime]=B.[ReadTime]
left join R_Watermeter_Building C on A.WatermeterID =c.WatermeterID 
where    C.BuildingID  = @BuildingID  ) t1
Union
select * from (
   SELECT   A.[ID]
  ,A.[WatermeterID]
  ,A.[ReadTime]
  ,A.[ReadNumber]* dbo.Func_GetSignByBit(C.[IsIn]) as [ReadNumber] 
FROM [Log_Watermeter] A 
inner join (select [WatermeterID],max([ReadTime]) as [ReadTime] from [Log_Watermeter] 
where  [ReadTime]<=@EndTime group by WatermeterID) B 
on A.[WatermeterID]=B.[WatermeterID] and A.[ReadTime]=B.[ReadTime]
left join R_Watermeter_Building C on A.WatermeterID =c.WatermeterID 
where    C.BuildingID  = @BuildingID  ) t2
实际为 开始时间对应的数值应向前而不是向后取值比较合理,特别是值按时间增长的读数记录。因此改为:

select * from (
    SELECT   A.[ID]
      ,A.[WatermeterID]
      ,A.[ReadTime]
      ,A.[ReadNumber]* dbo.Func_GetSignByBit(C.[IsIn]) as [ReadNumber] 
FROM [Log_Watermeter] A 
inner join (select [WatermeterID],Max([ReadTime]) as [ReadTime] from [Log_Watermeter] 
where  [ReadTime]<=@BeginTime group by WatermeterID) B 
on A.[WatermeterID]=B.[WatermeterID] and A.[ReadTime]=B.[ReadTime]
left join R_Watermeter_Building C on A.WatermeterID =c.WatermeterID 
where    C.BuildingID  = @BuildingID  ) t1
Union
select * from (
   SELECT   A.[ID]
  ,A.[WatermeterID]
  ,A.[ReadTime]
  ,A.[ReadNumber]* dbo.Func_GetSignByBit(C.[IsIn]) as [ReadNumber] 
FROM [Log_Watermeter] A 
inner join (select [WatermeterID],max([ReadTime]) as [ReadTime] from [Log_Watermeter] 
where  [ReadTime]<=@EndTime group by WatermeterID) B 
on A.[WatermeterID]=B.[WatermeterID] and A.[ReadTime]=B.[ReadTime]
left join R_Watermeter_Building C on A.WatermeterID =c.WatermeterID 
where    C.BuildingID  = @BuildingID  ) t2
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
date picker使用
SQL查询拼接存储过程 分页
串口通讯方法(WINAPI实现)
jsp页面使用C标签对时间日期进行判断
js 判断所选时间(或者当前时间)是否在某一时间段(转)
项目开发过程中,以前每次一遇到这种情况,我都记不住,现在终于记住了
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服