mysql排序分组新问题(求救各位sql高手)
时间:2011-06-02
来源:互联网
CREATE TABLE `tests` (
`id` int(10) NOT NULL DEFAULT '0',
`acst` int(10) DEFAULT NULL,
`dates` datetime DEFAULT NULL,
`counts` int(10) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO tests VALUES ('1', '1', '2011-06-01 00:01:04', '2');
INSERT INTO tests VALUES ('2', '1', '2011-06-01 00:01:18', '2');
INSERT INTO tests VALUES ('3', '1', '2011-06-01 00:01:34', '5');
INSERT INTO tests VALUES ('4', '0', '2011-06-01 00:01:37', '6');
INSERT INTO tests VALUES ('5', '0', '2011-06-01 00:01:38', '3');
INSERT INTO tests VALUES ('6', '1', '2011-06-01 00:01:46', '10');
INSERT INTO tests VALUES ('7', '1', '2011-06-01 00:02:00', '6');
INSERT INTO tests VALUES ('8', '1', '2011-06-01 00:02:05', '3');
INSERT INTO tests VALUES ('9', '1', '2011-06-01 00:02:21', '5');
INSERT INTO tests VALUES ('10', '1', '2011-06-01 00:02:28', '21');
INSERT INTO tests VALUES ('11', '1', '2011-06-01 00:02:43', '7');
INSERT INTO tests VALUES ('12', '0', '2011-06-01 00:02:48', '7');
INSERT INTO tests VALUES ('13', '1', '2011-06-01 21:31:45', '3');
set @rowNo = 0;
select
(@rowNo := @rowNo + 1) as id,
sum(counts) as `总记录数`,
min(dates) as `开始时间`,
case when max(dates)=min(dates) then NULL else max(dates) end as `结束时间`
from(
select *,
id-(select count(1) from tests where acst=t.acst and id<t.id) as groupid
from tests as t
) a
group by groupid,acst
/**
1 9 2011-06-01 00:01:04 2011-06-01 00:01:34
2 52 2011-06-01 00:01:46 2011-06-01 00:02:43
3 9 2011-06-01 00:01:37 2011-06-01 00:01:38
4 3 2011-06-01 21:31:45 NULL
5 7 2011-06-01 00:02:48 NULL
**/
之前FlySQL这种做法是id一个挨着一个排序就可以实现这种效果,现在顺序不挨着就排不出来了比如:
INSERT INTO tests VALUES ('1', '1', '2011-06-01 00:01:04', '2');
INSERT INTO tests VALUES ('3', '1', '2011-06-01 00:01:18', '2');
INSERT INTO tests VALUES ('5', '1', '2011-06-01 00:01:34', '5');
INSERT INTO tests VALUES ('6', '0', '2011-06-01 00:01:37', '6');
INSERT INTO tests VALUES ('7', '0', '2011-06-01 00:01:38', '3');
INSERT INTO tests VALUES ('10', '1', '2011-06-01 00:01:46', '10');
INSERT INTO tests VALUES ('11', '1', '2011-06-01 00:02:00', '6');
INSERT INTO tests VALUES ('13', '1', '2011-06-01 00:02:05', '3');
INSERT INTO tests VALUES ('14', '1', '2011-06-01 00:02:21', '5');
INSERT INTO tests VALUES ('17', '1', '2011-06-01 00:02:28', '21');
INSERT INTO tests VALUES ('20', '1', '2011-06-01 00:02:43', '7');
INSERT INTO tests VALUES ('30', '0', '2011-06-01 00:02:48', '7');
INSERT INTO tests VALUES ('32', '1', '2011-06-01 21:31:45', '3');
这种数据用上面那种方法就排列不出来,请教各位高手(先谢过了)注意是mysql版本的语法
最好是把数据调成
/**
1 9 2011-06-01 00:01:04 2011-06-01 00:01:34
2 52 2011-06-01 00:01:46 2011-06-01 00:02:43
3 9 2011-06-01 00:01:37 2011-06-01 00:01:38
4 3 2011-06-01 21:31:45 2011-06-01 00:02:48
5 7 2011-06-01 00:02:48 2011-06-01 21:31:45
6 3 2011-06-01 21:31:45 NULL
**/
`id` int(10) NOT NULL DEFAULT '0',
`acst` int(10) DEFAULT NULL,
`dates` datetime DEFAULT NULL,
`counts` int(10) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO tests VALUES ('1', '1', '2011-06-01 00:01:04', '2');
INSERT INTO tests VALUES ('2', '1', '2011-06-01 00:01:18', '2');
INSERT INTO tests VALUES ('3', '1', '2011-06-01 00:01:34', '5');
INSERT INTO tests VALUES ('4', '0', '2011-06-01 00:01:37', '6');
INSERT INTO tests VALUES ('5', '0', '2011-06-01 00:01:38', '3');
INSERT INTO tests VALUES ('6', '1', '2011-06-01 00:01:46', '10');
INSERT INTO tests VALUES ('7', '1', '2011-06-01 00:02:00', '6');
INSERT INTO tests VALUES ('8', '1', '2011-06-01 00:02:05', '3');
INSERT INTO tests VALUES ('9', '1', '2011-06-01 00:02:21', '5');
INSERT INTO tests VALUES ('10', '1', '2011-06-01 00:02:28', '21');
INSERT INTO tests VALUES ('11', '1', '2011-06-01 00:02:43', '7');
INSERT INTO tests VALUES ('12', '0', '2011-06-01 00:02:48', '7');
INSERT INTO tests VALUES ('13', '1', '2011-06-01 21:31:45', '3');
set @rowNo = 0;
select
(@rowNo := @rowNo + 1) as id,
sum(counts) as `总记录数`,
min(dates) as `开始时间`,
case when max(dates)=min(dates) then NULL else max(dates) end as `结束时间`
from(
select *,
id-(select count(1) from tests where acst=t.acst and id<t.id) as groupid
from tests as t
) a
group by groupid,acst
/**
1 9 2011-06-01 00:01:04 2011-06-01 00:01:34
2 52 2011-06-01 00:01:46 2011-06-01 00:02:43
3 9 2011-06-01 00:01:37 2011-06-01 00:01:38
4 3 2011-06-01 21:31:45 NULL
5 7 2011-06-01 00:02:48 NULL
**/
之前FlySQL这种做法是id一个挨着一个排序就可以实现这种效果,现在顺序不挨着就排不出来了比如:
INSERT INTO tests VALUES ('1', '1', '2011-06-01 00:01:04', '2');
INSERT INTO tests VALUES ('3', '1', '2011-06-01 00:01:18', '2');
INSERT INTO tests VALUES ('5', '1', '2011-06-01 00:01:34', '5');
INSERT INTO tests VALUES ('6', '0', '2011-06-01 00:01:37', '6');
INSERT INTO tests VALUES ('7', '0', '2011-06-01 00:01:38', '3');
INSERT INTO tests VALUES ('10', '1', '2011-06-01 00:01:46', '10');
INSERT INTO tests VALUES ('11', '1', '2011-06-01 00:02:00', '6');
INSERT INTO tests VALUES ('13', '1', '2011-06-01 00:02:05', '3');
INSERT INTO tests VALUES ('14', '1', '2011-06-01 00:02:21', '5');
INSERT INTO tests VALUES ('17', '1', '2011-06-01 00:02:28', '21');
INSERT INTO tests VALUES ('20', '1', '2011-06-01 00:02:43', '7');
INSERT INTO tests VALUES ('30', '0', '2011-06-01 00:02:48', '7');
INSERT INTO tests VALUES ('32', '1', '2011-06-01 21:31:45', '3');
这种数据用上面那种方法就排列不出来,请教各位高手(先谢过了)注意是mysql版本的语法
最好是把数据调成
/**
1 9 2011-06-01 00:01:04 2011-06-01 00:01:34
2 52 2011-06-01 00:01:46 2011-06-01 00:02:43
3 9 2011-06-01 00:01:37 2011-06-01 00:01:38
4 3 2011-06-01 21:31:45 2011-06-01 00:02:48
5 7 2011-06-01 00:02:48 2011-06-01 21:31:45
6 3 2011-06-01 21:31:45 NULL
**/
作者: horizon89 发布时间: 2011-06-02
自己顶。。。。期待高手。。。。。
作者: horizon89 发布时间: 2011-06-03
用INSERT INTO tests VALUES ('1', '1', '2011-06-01 00:01:04', '2');
INSERT INTO tests VALUES ('3', '1', '2011-06-01 00:01:18', '2');
INSERT INTO tests VALUES ('5', '1', '2011-06-01 00:01:34', '5');
INSERT INTO tests VALUES ('6', '0', '2011-06-01 00:01:37', '6');
INSERT INTO tests VALUES ('7', '0', '2011-06-01 00:01:38', '3');
INSERT INTO tests VALUES ('10', '1', '2011-06-01 00:01:46', '10');
INSERT INTO tests VALUES ('11', '1', '2011-06-01 00:02:00', '6');
INSERT INTO tests VALUES ('13', '1', '2011-06-01 00:02:05', '3');
INSERT INTO tests VALUES ('14', '1', '2011-06-01 00:02:21', '5');
INSERT INTO tests VALUES ('17', '1', '2011-06-01 00:02:28', '21');
INSERT INTO tests VALUES ('20', '1', '2011-06-01 00:02:43', '7');
INSERT INTO tests VALUES ('30', '0', '2011-06-01 00:02:48', '7');
INSERT INTO tests VALUES ('32', '1', '2011-06-01 21:31:45', '3');
数据,要求结果是什么
INSERT INTO tests VALUES ('3', '1', '2011-06-01 00:01:18', '2');
INSERT INTO tests VALUES ('5', '1', '2011-06-01 00:01:34', '5');
INSERT INTO tests VALUES ('6', '0', '2011-06-01 00:01:37', '6');
INSERT INTO tests VALUES ('7', '0', '2011-06-01 00:01:38', '3');
INSERT INTO tests VALUES ('10', '1', '2011-06-01 00:01:46', '10');
INSERT INTO tests VALUES ('11', '1', '2011-06-01 00:02:00', '6');
INSERT INTO tests VALUES ('13', '1', '2011-06-01 00:02:05', '3');
INSERT INTO tests VALUES ('14', '1', '2011-06-01 00:02:21', '5');
INSERT INTO tests VALUES ('17', '1', '2011-06-01 00:02:28', '21');
INSERT INTO tests VALUES ('20', '1', '2011-06-01 00:02:43', '7');
INSERT INTO tests VALUES ('30', '0', '2011-06-01 00:02:48', '7');
INSERT INTO tests VALUES ('32', '1', '2011-06-01 21:31:45', '3');
数据,要求结果是什么
作者: WWWWA 发布时间: 2011-06-03
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28