Sql分组与排序的问题

表如下所示:ID(varchar)Time(DateTime)A(int)B(int)12012-1-112:12:123512012-1-11:1:15622012-1... 表如下所示:
ID (varchar) Time(DateTime) A(int) B(int)
1 2012-1-1 12:12:12 3 5
1 2012-1-1 1:1:1 5 6
2 2012-1-2 12:1:1 2 6

要求按“Time”和"ID"分组,选出一个“Time”段内,最大时的A和B的和。例如,求出每一个ID在每一天中,“Time”最大时的A,和每一个ID每一天中B的和。 用SQL或者存储过程都可以,该怎么写呢?
展开
 我来答
爱在库尔勒
2013-07-01 · TA获得超过149个赞
知道答主
回答量:352
采纳率:0%
帮助的人:62.7万
展开全部

你的问题有问题:

  1. 选出一个“Time”段内,最大时的A和B的和,,,的意思是:  如id为1,今天最大time为12:12:12,,,,然后算出这个时间点的A+B的值,,,,是这个意思吗?

  2. 求出每一个ID在每一天中,“Time”最大时的A,和每一个ID每一天中B的和,,,,

    的意思是:如ID为1在这一天中,“Time”最大时的A,“time最大时”B的和,,,也就是说,和1的意思一样

    还有另外的意思是:如ID为1在这一天中,“Time”最大时的A + (一整天B的和)???

我是理解出了这几个意思,所以不知道怎么去处理,你最好再看看你的问题,意思表述的明确点。

追问
先按Time分组,一天是一组,然后找出这一天内的记录中:①Time最大时的A,②B的和
追答
SELECT A.ID,A.MAX_TIME,A.MAX_A,(SELECT SUM(B) FROM TEST_CWJ AB WHERE AB.ID = A.ID)
FROM
(select ID,max(TIME)MAX_TIME,MAX(A)MAX_A from TEST_CWJ group by ID)A
我测试的表结构
ID TIME A B
1 2013/7/2 10:28:37 3 5
1 2013/7/2 10:28:47 5 6
2 2013/7/3 10:28:56 2 6
测试的结果
ID MAX_TIME MAX_A SUM_B
1 2013/7/2 10:28:47 5 11
2 2013/7/3 10:28:56 2 6
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
醉红尘冥月
2013-07-01 · TA获得超过138个赞
知道小有建树答主
回答量:309
采纳率:0%
帮助的人:129万
展开全部
select a+b as sum from a inner join (select id,max(time) as time from a group by id)b on a.id=b.id and a.time=b.time ------未测试过
追问
我可能表达的不够清楚。我的意思是:先按Time和ID分组,得到了每一个ID每一天的记录。然后计算这些组记录中,①时间最大时的A;②所有B的和。
例如ID是"1"的记录有两条,然后得到的是这两天记录中,Time较大时的A;两条记录中B的和。所以结果是1 2012-1-1 12:12:12 3 11
追答
这个貌似有点烦了,直接查询的话语句会比较长了,用变量可能要简单点
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友7558ae7
2013-07-01 · TA获得超过5797个赞
知道小有建树答主
回答量:1730
采纳率:50%
帮助的人:1680万
展开全部
你的TIME精确到分还是秒﹖

试一下以下语句
SELECT ID,Time,MAX(A),SUM(B) FROM 表名 GROUP BY ID,Time
追问
不是MAX(A),是Time最大时的A
追答

多插了几条数据测试﹐写的比较乱﹐你放查询分析器里试运行下

思路是先把日期与时间分组﹐然后再把A与B分开查询﹐然后再合并

DECLARE @TB TABLE(ID VARCHAR(10),TIME DATETIME,A INT,B INT)

DECLARE @TB2 TABLE(ID VARCHAR(10),TIME1 VARCHAR(20),TIME2 TIME,A INT,B INT)

INSERT INTO @TB VALUES('1','2012-1-1 12:12:12',3,5)

INSERT INTO @TB VALUES('1','2012-1-1 1:1:1',5,6)

INSERT INTO @TB VALUES('2','2012-1-2 12:1:1',2,6)

INSERT INTO @TB VALUES('2','2012-1-2 12:12:1',3,6)

INSERT INTO @TB VALUES('2','2012-1-2 13:12:1',4,6)

INSERT INTO @TB2 SELECT ID,CONVERT(VARCHAR,TIME,111) AS TIME1 ,CONVERT(TIME,TIME,108) AS TIME2 ,A,B FROM @TB


SELECT A.ID,

                A.TIME1 AS DATE,

                 A.T2  AS TIME, 

                   C.A AS A,

                      B.B AS B 

FROM

 (SELECT ID,TIME1,MAX(TIME2)AS T2  FROM @TB2 GROUP BY ID,TIME1) AS A 

LEFT JOIN (SELECT ID,TIME1,SUM(B) AS B FROM @TB2 GROUP BY ID,TIME1) AS B 

ON A.ID=B.ID AND A.TIME1=B.TIME1 

  LEFT JOIN @TB2 C 

ON A.ID=C.ID AND A.TIME1=C.TIME1 AND A.T2=C.TIME2


效果如下

本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式