SQL Server 2008 R2——当前日期下,一年前数据的统计值
=================================版权声明=================================
版权声明:原创文章 谢绝转载
请通过右侧公告中的“联系邮箱(wlsandwho@foxmail.com)”联系我
勿用于学术性引用。
勿用于商业出版、商业印刷、商业引用以及其他商业用途。
本文不定期修正完善。
本文链接:http://www.cnblogs.com/wlsandwho/p/5010250.html
耻辱墙:http://www.cnblogs.com/wlsandwho/p/4206472.html
=======================================================================
没啥说的,鄙视那些无视版权随意抓取博文的爬虫小网站,祝你们早升极乐。
=======================================================================

这是企鹅群里一群友的问题。早晨9:13入群问问题,然后可以等一天,真佩服。
当然本着拒绝伸手党的原则,我给的代码只是大致的一个解决方案,并不使用给出的字段、数据以及边界范围。
=======================================================================
完整代码如下
--by wls 20151201
--网络代码有风险
--复制粘贴须谨慎
USE tempdb
GO IF OBJECT_ID (N't_TestbyWLS', N'U') IS NOT NULL
DROP TABLE t_TestbyWLS;
GO CREATE TABLE t_TestbyWLS(SN INTEGER PRIMARY KEY,OccurTime DATETIME,OccurQty INTEGER)
GO INSERT INTO t_TestbyWLS
SELECT 1,'2015-12-01 11:11:11.111',11
UNION
SELECT 111,'2015-12-01 10:11:11.111',22
UNION
SELECT 2,'2015-11-11 11:11:11.111',33
UNION
SELECT 3,'2015-11-01 11:11:11.111',44
UNION
SELECT 4,'2015-09-11 11:11:11.111',55
UNION
SELECT 6,'2015-09-11 11:11:11.111',66
UNION
SELECT 7,'2015-08-11 11:11:11.111',111
UNION
SELECT 8,'2015-08-01 11:11:11.111',11
UNION
SELECT 9,'2015-07-11 11:11:11.111',11
UNION
SELECT 10,'2015-07-11 11:11:10.111',111
UNION
SELECT 11,'2015-06-11 11:11:11.111',11
UNION
SELECT 12,'2015-06-11 11:11:11.111',111
UNION
SELECT 13,'2015-05-11 11:11:11.111',11
UNION
SELECT 14,'2015-05-11 11:11:11.111',111
UNION
SELECT 15,'2015-04-11 11:11:11.111',11
UNION
SELECT 16,'2015-04-11 11:11:11.111',111
UNION
SELECT 17,'2015-03-11 11:11:11.111',11
UNION
SELECT 18,'2015-03-11 11:11:11.111',111
UNION
SELECT 19,'2015-02-11 11:11:11.111',11
UNION
SELECT 20,'2015-02-01 11:11:11.111',10
UNION
SELECT 21,'2015-01-11 11:11:11.111',11
UNION
SELECT 22,'2015-01-01 11:11:11.111',10
UNION
SELECT 23,'2014-11-11 11:11:11.111',11
UNION
SELECT 24,'2013-11-11 11:11:11.111',11
UNION
SELECT 25,'2014-12-11 11:11:11.111',11
GO --SELECT * FROM t_TestbyWLS
--GO WITH TempYYYYMM
AS
(
SELECT SN,OccurQty,OccurTime,CAST(CONVERT (NVARCHAR(12),occurtime,112) AS INTEGER)/100 AS YYYYMM FROM t_TestbyWLS
),
TempSumMM
AS
(
SELECT YYYYMM,SUM(OccurQty) AS MMqty FROM TempYYYYMM GROUP BY YYYYMM
),
TempRangeYYYYMM
as
(
SELECT CAST(CONVERT (NVARCHAR(12),DATEADD(YEAR,-1,GETDATE()),112) AS INTEGER)/100 AS LYYYYMM,
CAST(CONVERT (NVARCHAR(12),GETDATE(),112) AS INTEGER)/100 AS RYYYYMM
)
SELECT DISTINCT b.MMqty,b.yyyymm from TempSumMM b LEFT JOIN TempYYYYMM a ON b.YYYYMM=a.YYYYMM LEFT JOIN TempRangeYYYYMM c
ON b.YYYYMM>=c.LYYYYMM AND b.YYYYMM<c.RYYYYMM ORDER BY b.YYYYMM
GO
=======================================================================
CTE分了三个部分:
第一部分增加YYYYMM,因为直接用DATETIME类型进行操作感觉不方便。
投机取巧的地方是把DATETIME转作整数类型的“年+月”处理,“年+月”是YYYYMM的样式,不包含DD。年月的大小跟数字的大小自然契合,方便比较。
第二部分按YYYYMM分组进行了数据统计。
第三部分只是我不想写成存储过程,就顺便写了个选择语句,用途是生成“当前日期的一年前”这个概念涉及到的边界值。很显然可以方便的对边界进行包含和不包含的处理。
=======================================================================
下面是执行计划,看起来还不错,当然我的数据很少。

=======================================================================
非专业SQL 不求高效 但求能跑

(友情支持请扫描这个)
微信扫描上方二维码捐赠
SQL Server 2008 R2——当前日期下,一年前数据的统计值的更多相关文章
- VMware系统运维(四)SQL Server 2008 R2 新建数据库与ODBC数据
1.新建数据库,右击"新建数据库-." 2.设置数据库名,初始数据库大小,如果要配置数据库优化,可以考虑初始大小与日志大小,点击添加安装完成,即完成数据库新建. 3.ODBC数据源 ...
- SQL Server 2008 R2 制作数据库结构和数据脚本
数据库中包含众多表和数据,有时候需要创建脚本将表结构和数据一起导出 具体方法如下: 1.右键选择数据库,选择“任务”--->“生成脚本” 2.根据需求,选择制作脚本的对象,一般情况选择“表” 3 ...
- ASP .Net Core 在 CentOS8 ARM 下连接 SQL Server 2008 R2(Hypervisor)
本文主要记录在 ARM 系统下无法连接SQL Server 2008 R2 的解决过程. 解决方案是使用 ODBC 的方式连接数据库,进行操作. 手上有公司的华为鲲鹏云计算 ARM 架构的 CentO ...
- SQL Server 2008 R2的发布订阅配置实践
纸上得来终觉浅,绝知此事要躬行.搞技术尤其如此,看别人配置SQL SERVER的复制,发布-订阅.镜像.日志传送者方面的文章,感觉挺简单,好像轻轻松松的,但是当你自己去实践的时候,你会发现还真不是那么 ...
- SQL Server 2008 R2——使用计算列为表创建自定义的自增列
=================================版权声明================================= 版权声明:原创文章 谢绝转载 请通过右侧公告中的“联系邮 ...
- SQL Server 2008 R2数据库镜像部署
概述 “数据库镜像”是一种针对数据库高可用性的基于软件的解决方案.其维护着一个数据库的两个相同的副本,这两个副本分别放置在不同的SQL Server数据库实例中.建议使用不同位置的两台服务器来承载.在 ...
- SQL Server 2008 R2没有卸载干净
在卸载Microsoft SQL Server 2008 R2 安装程序(简体中文) 出现 :“警告 26003.无法卸载 Microsoft SQL Server 2008 R2 安装程序支持文件, ...
- Sql server 2008 R2 实现远程异地备份
1. 环境: a)两台同样的Sql Server 2008 R2 服务器 b)操作系统都是windows 2008 c)需要将102.108.0.1数据库MSGC远程备份到112.118.0.2的服务 ...
- SQL Server 2008 r2 中 SQL语句提示“对象名无效”,但可执行
[问题描述]在使用 SQL Server 2008 r2 时,有时在完成SQL书写后,会提示“对象名无效”,而SQL语句可正常执行. [原因]缓存相关. [解决方法]ctrl+shift+R 刷新下, ...
随机推荐
- VR ( Virtual Reality )、AR(Augmented Reality)、MR(Mix Reality)和CR(Cinematic Reality)是什么鬼?
整个社会对虚拟现实的研究和开发源于上个世纪六十年代,计算机图形学.人机接口技术.图像处理与模式识别.多传感技术.语音处理与音响技术.高性能计算机系统.人工智能等领域在之后半个世纪取得了长足的发展为虚拟 ...
- 浅谈angular2+ionic2
浅谈angular2+ionic2 前言: 不要用angular的语法去写angular2,有人说二者就像Java和JavaScript的区别. 1. 项目所用:angular2+ionic2 ...
- 解决 SpringBoot 没有主清单属性
问题:SpringBoot打包成jar后运行提示没有主清单属性 解决:补全maven中的bulid信息 <plugin> <groupId>org.springframewor ...
- node入门学习1
一个普通网站访问过程(1)浏览器向服务器发出一个HTTP请求(2)域名解析为IP地址(3)建立TCP连接(4)浏览器发起HTTP请求(5)服务器接收到HTTP请求,解析请求的路径和参数 出现乱码的原因 ...
- 图片放大功能插件及jquery.extend函数理解
前端时间,产品提出社区评论中的图片需要有放大功能.感觉可以共用,所以就想整合一个插件,过程中也借鉴了一些例子. 分析下自己的代码思路: var scaleImg = function(opts) { ...
- IE开发人员工具之实用功能讲解
F12快捷键调出开发人员工具 一.JS的内容格式化 1.内容较乱的js脚本: 2.勾选下面两项即可进行格式化脚本:自动换行与格式化JS 3.调理清楚的脚本 二:清空控制台 1.右键->清空 2. ...
- Android混合开发之WebView使用总结
前言: 今天修改项目中一个有关WebView使用的bug,激起了我总结WebView的动机,今天抽空做个总结. 混合开发相关博客: Android混合开发之WebView使用总结 Android混合开 ...
- Unity3D移动平台动态读取外部文件全解析
前言: 一直有个想法,就是把工作中遇到的坑通过自己的深挖,总结成一套相同问题的解决方案供各位同行拍砖探讨.眼瞅着2015年第一个工作日就要来到了,小匹夫也休息的差不多了,寻思着也该写点东西活动活动大脑 ...
- HTML5-video标签-实现点击预览图播放或暂停视频
HTML5-video标签-实现点击预览图播放或暂停视频 刚刚参加工作,开始更多的接触到一些新的知识,促使我开始了解html5和css3的新特性.这时我才真的发现到html5和css3的强大. 之前关 ...
- iOS 触摸事件与UIResponder(内容根据iOS编程编写)
触摸事件 因为 UIView 是 UIResponder 的子类,所以覆盖以下四个方法就可以处理四种不同的触摸事件: 1. 一根手指或多根手指触摸屏幕 - (void)touchesBegan:(N ...