SQL_求集合中每天最大时间记录的总和
2014-02-22 12:02
786 查看
--问题求 集合中每天最大时间的总和
表中的数据
列: 用户 分数 时间 A 2 2014-01-01 01:00:00 A 2 2014-01-01 02:00:00 A 2 2014-01-01 03:00:00 A 2 2014-01-02 01:00:00 A 2 2014-01-02 02:00:00 A 2 2014-01-02 03:00:00 A 2 2014-01-03 02:00:00 A 2 2014-01-03 03:00:00 A 2 2014-01-04 01:00:00 A 2 2014-01-05 01:00:00 A 2 2014-01-06 01:00:00 A 2 2014-01-06 02:00:00
怎么得到每天最大时间的那条数据,最后的结果要为:
列: 用户 分数 时间 A 2 2014-01-01 03:00:00 A 2 2014-01-02 03:00:00 A 2 2014-01-03 03:00:00 A 2 2014-01-04 01:00:00 A 2 2014-01-05 01:00:00 A 2 2014-01-06 02:00:00
然后再对这个结果进行用户的分组,求分数的总和。
得到的最终结果为:
A 12
DECLARE @table TABLE ( [id] INT PRIMARY KEY IDENTITY(1, 1) NOT NULL , [name] VARCHAR(30) NOT NULL , [record] INT NOT NULL , [date] DATETIME NOT NULL ) INSERT INTO @table SELECT 'A' ,2 ,'2014-01-01 01:00:00' UNION ALL SELECT 'A' ,2 ,'2014-01-01 02:00:00' UNION ALL SELECT 'A' ,2 ,'2014-01-01 03:00:00' UNION ALL SELECT 'A' ,2 ,'2014-01-02 01:00:00' UNION ALL SELECT 'A' ,2 ,'2014-01-02 02:00:00' UNION ALL SELECT 'A' ,2 ,'2014-01-02 03:00:00' UNION ALL SELECT 'A' ,2 ,'2014-01-03 02:00:00' UNION ALL SELECT 'A' ,2 ,'2014-01-03 03:00:00' UNION ALL SELECT 'A' ,2 ,'2014-01-04 01:00:00' UNION ALL SELECT 'A' ,2 ,'2014-01-05 01:00:00' UNION ALL SELECT 'A' ,2 ,'2014-01-06 01:00:00' UNION ALL SELECT 'A' ,2 ,'2014-01-06 02:00:00' SELECT * FROM @table
排序,为分组做准备,partition分区 插入行号,并按照时间排序
WITH q AS ( SELECT [name] ,[record] ,[date] , ROW_NUMBER() OVER ( PARTITION BY CAST(date AS DATE) ORDER BY [date] DESC ) AS rownum FROM @table ) SELECT * FROM q
取得一天中最大的记录
SELECT * FROM q WHERE rownum = 1
求和
SELECT name,SUM(record) AS 'totolrecord' FROM q GROUP BY rownum ,name HAVING rownum = 1
原题:http://bbs.csdn.net/topics/390697419
--我的理解题意错误解答,数据也私自更改了为的是更好的区分
DECLARE @table TABLE ( [id] INT PRIMARY KEY IDENTITY(1, 1) NOT NULL , [name] VARCHAR(30) NOT NULL , [record] INT NOT NULL , [date] DATETIME NOT NULL ) INSERT INTO @table( name, record, date )VALUES ( 'A', 1, '2014-01-01 01:00:00' ) INSERT INTO @table( name, record, date )VALUES ( 'A', 2, '2014-01-01 02:00:00' ) INSERT INTO @table( name, record, date )VALUES ( 'A', 3, '2014-01-01 03:00:00' ) INSERT INTO @table( name, record, date )VALUES ( 'A', 2, '2014-01-02 01:00:00' ) INSERT INTO @table( name, record, date )VALUES ( 'A', 2, '2014-01-02 02:00:00' ) INSERT INTO @table( name, record, date )VALUES ( 'A', 2, '2014-01-02 03:00:00' ) INSERT INTO @table( name, record, date )VALUES ( 'A', 2, '2014-01-03 02:00:00' ) INSERT INTO @table( name, record, date )VALUES ( 'A', 2, '2014-01-03 03:00:00' ) INSERT INTO @table( name, record, date )VALUES ( 'A', 2, '2014-01-04 01:00:00' ) INSERT INTO @table( name, record, date )VALUES ( 'A', 2, '2014-01-05 01:00:00' ) INSERT INTO @table( name, record, date )VALUES ( 'A', 2, '2014-01-06 01:00:00' ) INSERT INTO @table( name, record, date )VALUES ( 'A', 2, '2014-01-06 02:00:00' )
按照分组,查询最大的record记录
SELECT MAX(record),YEAR([date]) FROM @table GROUP BY YEAR([date])
按照年月日分组,取每日中最大的record记录
SELECT [name] AS Name ,MAX(record) AS MaxRecord ,CAST([date] AS DATE) AS Date FROM @table GROUP BY Name ,CAST([date] AS DATE)
相关文章推荐
- 怎样写获取时间最大的数据记录的sql语句
- sql表中如何获得最大时间的记录
- Sql语句 表中相同的记录(某个字段)只显示一条,按照时间排序显示最大或最小
- [VB.NET]用SQL查询得到(按编号分组的日期最大的记录)
- [MySQL]学习笔记- 用户行为表中,查询每个人的一条最新行为(分组 排序 取时间最大的一条记录)
- T-Sql - 数据分租求最大指定字段最大的记录
- SQL 数据小练习,呼叫中心 ----查询通话时间最长的5条记录 ----查询以0开头的通话总时,以秒为计算单位 ----查询2010年7月通话总时长最多的前两个呼叫员的编号 ----查询201
- 常用SQL分组最大值记录
- SQL 分组后获取其中一个字段最大值的整条记录
- SQL 分组后获取其中一个字段最大值的整条记录
- SQL:显示每天的小计,某一天没有记录也要显示
- lumbda表达式的几个例子(lumbda对集合遍历、过滤、转换、合并、创建、最大、最小、平均、总和值、并行流、将数组转换成流)
- 详细记录sql运行时间(精确到毫秒)
- sql取记录中的第一条或是最大的一条
- sql根据时间查询记录
- SQL自定义函数求当天最小时间和最大时间
- 关于使用一条SQL语句 找出同时符合多个tag条件的记录集合算法
- PL/SQL 记录集合IS TABLE OF的使用
- SQL DATEDIFF语法及时间函数 Sql 查询当天、本周、本月记录
- 讨论记录:求大于一个时间段的最大平均积分,O(n)时间实现