SQL回炉系列(五) 为显示曲线图获取不同时间颗粒的数据

本文主要是介绍SQL回炉系列(五) 为显示曲线图获取不同时间颗粒的数据,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在项目中,需要给用户展现某栋建筑的能耗曲线,用户可以选择单个电表,也可以选择总表,可以选择按年逐月、按月逐日或按日逐时。这是典型的数据分析和计算过程。闲话少说,直接上代码:

USE [PRODMS]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GOALTER proc [dbo].[getConsumptionChartData](@DateBegin  varchar(20),@DateEnd Varchar(20),@ty varchar(2), --y代表年,m代表月,d代表日逐时,b代表区间@backid varchar(3) -- 0 代表总能耗,其它数字代表各个电表)asbeginif @ty='y' -- 按年逐月beginif(@backid='0') -- 总能耗begin               select sum(consumption) ep , sum(price) price, convert(varchar(7),getTime,120) getTime from HourCost   where convert(varchar(4),getTime,120)=convert(varchar(4),@DateBegin,120)    group by convert(varchar(7),getTime,120)order by gettimeendelse -- 单个房间的能耗beginselect sum(consumption) ep , sum(price) price, convert(varchar(7),getTime,120) getTime from HourCost   where back=@backidand convert(varchar(4),getTime,120)=convert(varchar(4),@DateBegin,120)  group by convert(varchar(7),getTime,120)order by gettimeendendif @ty='m' -- 按月逐日beginif(@backid='0') -- 总能耗begin select sum(consumption) ep , sum(price) price, convert(varchar(10),getTime,120) getTime from HourCost where convert(varchar(7),getTime,120)=convert(varchar(7),@DateBegin,120)    group by convert(varchar(10),getTime,120)order by gettime    endelse -- 单个房间的能耗beginselect sum(consumption) ep , sum(price) price, convert(varchar(10),getTime,120) getTime from HourCost   where back=@backidand convert(varchar(7),getTime,120)=convert(varchar(7),@DateBegin,120)  group by convert(varchar(10),getTime,120) order by gettime    endendif @ty='d' -- 按日逐时begin   if(@backid='0') -- 总能耗beginselect sum(consumption) ep , sum(price) price, convert(varchar(13),getTime,120)+':00:00' getTime from HourCost where convert(varchar(10),getTime,120)=convert(varchar(10),@DateBegin,120)  group by convert(varchar(13),getTime,120)order by gettime    endelse -- 单个房间的能耗beginselect back, consumption ep , convert(varchar(13),getTime,120)+':00:00' gettime, price from HourCost where back=@backidand convert(varchar(10),getTime,120)=convert(varchar(10),@DateBegin,120)    order by gettime            endend if @ty='b' -- 时间区间beginif(@backid='0') -- 总能耗begin select convert(varchar(13),getTime,120)+':00:00' gettime, sum(consumption) ep ,sum(price) price from HourCost where  convert(varchar(13),getTime,120)>=convert(varchar(13),@DateBegin,120)and convert(varchar(13),getTime,120)<=convert(varchar(13),@DateEnd,120)group by convert(varchar(13),getTime,120)   order by gettime    endelse -- 单个房间beginselect back,  gettime, consumption ep ,price from HourCost where back=@backidand convert(varchar(13),getTime,120)>=convert(varchar(13),@DateBegin,120)and convert(varchar(13),getTime,120)<=convert(varchar(13),@DateEnd,120)order by gettime    endENDend--execute getConsumptionChartData '2014-08','2014-02-15 23:00:00','m','0'--execute getConsumptionChartData '2014','2014-02-15 23:00:00','y','14'--execute getConsumptionChartData '2015-03-26','2014-02-15 23:00:00','d','7'--execute getConsumptionChartData '2015-03-20 02:00:00','2015-03-20 12:00:00','b','6'  
  • SQL回炉系列(一) 序言
  • SQL回炉系列(二) 多表联合查询和排序
  • SQL回炉系列(三) 拆分原始数据到对应的月份表中
  • SQL回炉系列(四) 删除重复数据
  • SQL回炉系列(五) 为显示曲线图获取不同时间颗粒的数据

这篇关于SQL回炉系列(五) 为显示曲线图获取不同时间颗粒的数据的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/384211

相关文章

MySql中的数据库连接池详解

《MySql中的数据库连接池详解》:本文主要介绍MySql中的数据库连接池方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录mysql数据库连接池1、概念2、为什么会出现数据库连接池3、原理4、数据库连接池的提供商5、DataSource数据源6、DBCP7、C

Android如何获取当前CPU频率和占用率

《Android如何获取当前CPU频率和占用率》最近在优化App的性能,需要获取当前CPU视频频率和占用率,所以本文小编就来和大家总结一下如何在Android中获取当前CPU频率和占用率吧... 最近在优化 App 的性能,需要获取当前 CPU视频频率和占用率,通过查询资料,大致思路如下:目前没有标准的

MySQL的隐式锁(Implicit Lock)原理实现

《MySQL的隐式锁(ImplicitLock)原理实现》MySQL的InnoDB存储引擎中隐式锁是一种自动管理的锁,用于保证事务在行级别操作时的数据一致性和安全性,本文主要介绍了MySQL的隐式锁... 目录1. 背景:什么是隐式锁?2. 隐式锁的工作原理3. 隐式锁的类型4. 隐式锁的实现与源代码分析4

MySQL中Next-Key Lock底层原理实现

《MySQL中Next-KeyLock底层原理实现》Next-KeyLock是MySQLInnoDB存储引擎中的一种锁机制,结合记录锁和间隙锁,用于高效并发控制并避免幻读,本文主要介绍了MySQL中... 目录一、Next-Key Lock 的定义与作用二、底层原理三、源代码解析四、总结Next-Key L

MySQL常见的存储引擎和区别说明

《MySQL常见的存储引擎和区别说明》MySQL支持多种存储引擎,如InnoDB、MyISAM、MEMORY、Archive、CSV和Blackhole,每种引擎有其特点和适用场景,选择存储引擎时需根... 目录mysql常见的存储引擎和区别说明1. InnoDB2. MyISAM3. MEMORY4. A

CSS模拟 html 的 title 属性(鼠标悬浮显示提示文字效果)

《CSS模拟html的title属性(鼠标悬浮显示提示文字效果)》:本文主要介绍了如何使用CSS模拟HTML的title属性,通过鼠标悬浮显示提示文字效果,通过设置`.tipBox`和`.tipBox.tipContent`的样式,实现了提示内容的隐藏和显示,详细内容请阅读本文,希望能对你有所帮助... 效

Mysql中InnoDB与MyISAM索引差异详解(最新整理)

《Mysql中InnoDB与MyISAM索引差异详解(最新整理)》InnoDB和MyISAM在索引实现和特性上有差异,包括聚集索引、非聚集索引、事务支持、并发控制、覆盖索引、主键约束、外键支持和物理存... 目录1. 索引类型与数据存储方式InnoDBMyISAM2. 事务与并发控制InnoDBMyISAM

MySQL 日期时间格式化函数 DATE_FORMAT() 的使用示例详解

《MySQL日期时间格式化函数DATE_FORMAT()的使用示例详解》`DATE_FORMAT()`是MySQL中用于格式化日期时间的函数,本文详细介绍了其语法、格式化字符串的含义以及常见日期... 目录一、DATE_FORMAT()语法二、格式化字符串详解三、常见日期时间格式组合四、业务场景五、总结一、

mysql线上查询之前要性能调优的技巧及示例

《mysql线上查询之前要性能调优的技巧及示例》文章介绍了查询优化的几种方法,包括使用索引、避免不必要的列和行、有效的JOIN策略、子查询和派生表的优化、查询提示和优化器提示等,这些方法可以帮助提高数... 目录避免不必要的列和行使用有效的JOIN策略使用子查询和派生表时要小心使用查询提示和优化器提示其他常

grom设置全局日志实现执行并打印sql语句

《grom设置全局日志实现执行并打印sql语句》本文主要介绍了grom设置全局日志实现执行并打印sql语句,包括设置日志级别、实现自定义Logger接口以及如何使用GORM的默认logger,通过这些... 目录gorm中的自定义日志gorm中日志的其他操作日志级别Debug自定义 Loggergorm中的