记一个简单的sql查询
在我们做各类统计和各类报表的时候,会有各种各样的查询要求、条件
这篇主要记录一个常见的统计查询
要求如下:
统计一段时间内,每天注册人数,如果某天没有人注册则显示为0
现在建个简单的表来试试
建表语句如下:
CREATE TABLE [dbo].[UserInfo](
[UserID] [int] IDENTITY(1,1) NOT NULL,
[UserName] [varchar](50) NOT NULL,
[URegTime] [datetime] NOT NULL,
CONSTRAINT [PK_UserInfo] PRIMARY KEY CLUSTERED
(
[UserID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
然后向其插入一些数据
INSERT INTO [dbo].[UserInfo]([UserName],[URegTime])VALUES('catcher1','2016-03-01 8:00:00')
INSERT INTO [dbo].[UserInfo]([UserName],[URegTime])VALUES('catcher2','2016-03-01 9:00:00')
INSERT INTO [dbo].[UserInfo]([UserName],[URegTime])VALUES('catcher3','2016-03-05 8:00:00')
INSERT INTO [dbo].[UserInfo]([UserName],[URegTime])VALUES('catcher4','2016-03-05 20:00:00')
INSERT INTO [dbo].[UserInfo]([UserName],[URegTime])VALUES('catcher5','2016-03-07 8:00:00')
INSERT INTO [dbo].[UserInfo]([UserName],[URegTime])VALUES('catcher6','2016-03-09 8:00:00')
INSERT INTO [dbo].[UserInfo]([UserName],[URegTime])VALUES('catcher7','2016-03-11 8:00:00')
INSERT INTO [dbo].[UserInfo]([UserName],[URegTime])VALUES('catcher8','2016-03-11 18:00:00')
INSERT INTO [dbo].[UserInfo]([UserName],[URegTime])VALUES('catcher9','2016-03-15 8:00:00')
INSERT INTO [dbo].[UserInfo]([UserName],[URegTime])VALUES('catcher10','2016-03-17 8:00:00')
INSERT INTO [dbo].[UserInfo]([UserName],[URegTime])VALUES('catcher11','2016-03-17 11:00:00')
INSERT INTO [dbo].[UserInfo]([UserName],[URegTime])VALUES('catcher12','2016-03-17 13:00:00')
INSERT INTO [dbo].[UserInfo]([UserName],[URegTime])VALUES('catcher13','2016-03-18 8:00:00')
INSERT INTO [dbo].[UserInfo]([UserName],[URegTime])VALUES('catcher14','2016-03-19 8:00:00')
INSERT INTO [dbo].[UserInfo]([UserName],[URegTime])VALUES('catcher15','2016-03-20 8:00:00')
INSERT INTO [dbo].[UserInfo]([UserName],[URegTime])VALUES('catcher16','2016-03-20 11:00:00')
INSERT INTO [dbo].[UserInfo]([UserName],[URegTime])VALUES('catcher17','2016-03-20 12:00:00')
INSERT INTO [dbo].[UserInfo]([UserName],[URegTime])VALUES('catcher18','2016-03-21 8:00:00')
INSERT INTO [dbo].[UserInfo]([UserName],[URegTime])VALUES('catcher19','2016-03-21 9:00:00')
INSERT INTO [dbo].[UserInfo]([UserName],[URegTime])VALUES('catcher20','2016-03-22 8:00:00')
INSERT INTO [dbo].[UserInfo]([UserName],[URegTime])VALUES('catcher21','2016-03-22 12:00:00')
INSERT INTO [dbo].[UserInfo]([UserName],[URegTime])VALUES('catcher22','2016-03-26 8:00:00')
INSERT INTO [dbo].[UserInfo]([UserName],[URegTime])VALUES('catcher23','2016-03-26 10:00:00')
INSERT INTO [dbo].[UserInfo]([UserName],[URegTime])VALUES('catcher24','2016-03-26 11:00:00')
INSERT INTO [dbo].[UserInfo]([UserName],[URegTime])VALUES('catcher25','2016-03-26 20:00:00')
下面来看看编写符合要求的sql查询
select b.regTime,userCount =isnull(a.userCount,0)
from
(
select regTime=convert(varchar(10),dateadd(dd,number,'2016-03-01'),120)
from master..spt_values
where type='p' and number <= datediff(dd,'2016-03-01',GETDATE())
) b
left join
(
select
userCount = COUNT(*),
regTime = CONVERT(varchar(4),YEAR(u.URegTime))+'-' +right(cast(month(u.URegTime)+100 as varchar),2) +'-'+right(cast(Day(u.URegTime)+100 as varchar),2)
from UserInfo u
group by YEAR(u.URegTime),Month(u.URegTime),Day(u.URegTime)
) a on a.regTime = b.regTime
来看看结果,左边是原始数据,右边是统计数据

思路很简单,找出这段时间范围内(2016年3月1号到今天)的所有日期去跟我们相应的数据进行左连接即可!
其中用到了一个系统常量表 master..spt_values
一些相关这个表的具体内容可以看看下面的文章
Master..spt_values system table
记一个简单的sql查询的更多相关文章
- MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架
MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以使用简单的XML或注解用 ...
- 一个有趣的 SQL 查询(查询7天连续登陆)
一个有趣的 SQL 查询 一个朋友有这样一个SQL查询需求: 有一个登录表(tmp_test),包含用户ID(uid)和登录时间(login_time).表结构如下: . row ********** ...
- C++ 容器的综合应用的一个简单实例——文本查询程序
C++ 容器的综合应用的一个简单实例——文本查询程序 [0. 需求] 最近在粗略学习<C++ Primer 4th>的容器内容,关联容器的章节末尾有个很不错的实例.通过实现一个简单的文本查 ...
- tp5 r3 一个简单的SQL语句调试实例
tp5 r3 一个简单的SQL语句调试实例先看效果核心代码 public function index() { if (IS_AJAX && session("uid&quo ...
- 发送json-简单的传参查询和简单的sql查询
简单的传参查询并转化为json using System; using System.Collections.Generic; using System.Linq; using System.Web; ...
- 一个有趣的 SQL 查询
来源:站长资讯 一个朋友有这样一个SQL查询需求: 有一个登录表(tmp_test),包含用户ID(uid)和登录时间(login_time).表结构如下: ********************* ...
- 一条简单的 SQL 查询语句到底经历了什么?
一.MySQL 基础架构 整体来说 MySQL 主要分为两个部分,一个部分是:Server 层,另一部分是:存储引擎层. 其中 Server 层包括有连接器.查询缓存.分析器.优化器.执行器等,存 ...
- Android adb使用sqlite3对一个数据库进行sql查询
sqlite是Android下集成的一个轻量级数据库,我们可以通过adb程序进入数据库命令行,对数据进行查询,具体操作如下: ①打开windows的cmd ②输入adb shell.此时进入了该安卓系 ...
- DAY5 php + mysql 写一个简单的sql注入平台
php mysql 在浏览器输入用户名,去数据库查询.查到则显示在浏览器,查不到则显示空. sql 里面三个字段 id username password create table t1 (id in ...
随机推荐
- HDFS 架构解析
本文以 Hadoop 提供的分布式文件系统(HDFS)为例来进一步展开解析分布式存储服务架构设计的要点. 架构目标 任何一种软件框架或服务都是为了解决特定问题而产生的.还记得我们在 <分布式存储 ...
- SQL Azure (15) SQL Azure 新的规格
<Windows Azure Platform 系列文章目录> 在以前的文章中,笔者给大家介绍了Microsoft Azure SQL Database (以前被称为SQL Azure)的 ...
- SQL Server 2012 Managed Service Account
原创地址:http://www.cnblogs.com/jfzhu/p/4007472.html 转载请注明出处 (一)Windows服务使用的登陆帐号 Windows服务只有登录到某一帐户的情况下才 ...
- 老司机学新平台 - Xamarin Forms开发框架之MvvmCross插件精选
在前两篇老司机学Xamarin系列中,简单介绍了Xamarin开发环境的搭建以及Prism和MvvmCross这两个开发框架.不同的框架,往往不仅仅使用不同的架构风格,同时社区活跃度不同,各种功能模块 ...
- sleep和wait区别
1. sleep和wait都是用来进行线程控制,他们最大本质的区别是: sleep()不释放同步锁,wait()释放同步锁. sleep(milliseconds)可以用时 ...
- JBoss AS
即 JBoss Application Server - JBoss Community The JBoss AS community project has been renamed to the ...
- TDR测试原理
什么是TDR? TDR是英文Time Domain Reflectometry 的缩写,中文名叫时域反射计,是测量传输线特性阻抗的主要工具.TDR主要由三部分构成:快沿信号发生器,采样示波器和探头系统 ...
- SQL Server中的高可用性(1)----高可用性概览
自从SQL Server 2005以来,微软已经提供了多种高可用性技术来减少宕机时间和增加对业务数据的保护,而随着SQL Server 2008,SQL Server 2008 R2,SQL ...
- iOS之Core Data及其线程安全
一.简介 Core Data是iOS5之后才出现的一个框架,它提供了对象-关系映射(ORM)的功能,即能够将OC对象转化成数据,保存在SQLite数据库文件中,也能够将保存在数据库中的数据还原成OC对 ...
- js+css实现骰子的随机转动
网上找的例子,然后增添了新的东西,在这里展示一下...... 效果图预览: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitio ...