http://blog.csdn.net/acmain_chm/article/details/4095531MySQL中的ROWNUM的实现 MySQL 几乎模拟了 Oracle,SQL Server等商业数据库的大部分功能,函数。但很可惜,到目前的版本(5.1.33)为止,仍没有实现ROWNUM这个功能。 下面介绍几种具体的实现方法.建立实验环境如下mysql> create table tbl ( -> id int primary key, -> col int -> );Que...
set @a=0; UPDATE dd a inner join (select @a:=@a+1 as newid,`ID` from dd ) b on a.`ID`=b.id SET a.id=newid ;SELECT a.*,TIMEDIFF(b.`时间`,a.`时间`) AS 处理时间,dd AS 平均用时 FROM dd a LEFT JOIN dd b ON a.`ID`=b.`ID`-1 AND a.`flow_id`=b.`flow_id` INNER JOIN ( SELECT 姓名,SUM(aa)/(3600*(SELECT COUNT(*) FROM dd WHERE `姓名`=a1.`姓名`)) AS dd, (SELECT COUNT(*) FROM dd WHERE `姓名`=a1.`姓名`) FROM ( SELECT a.*,b.`时间` AS bsj,TIMEDIFF(b.`时间`,a.`时间`) AS aa FROM dd a LEFT JOIN dd b ON a.`ID`=b.`ID`-1 AND a.`flow_id`=b.`flow_id` ) a1 GROUP BY 姓名
) c1 ON a.`姓名`=c1.`姓名`
;
谢谢wwwwb,关键这一系列语句无法写入到一个视图中
不过,如果数据大,每次都UPDATE一下是不是造成装载太慢
插入有自增字段的临时表orSELECT * FROM ( SELECT a.id,a.`flow_id`,MIN(b.id) AS newid FROM dda a LEFT JOIN dda b ON a.`flow_id`=b.`flow_id` AND a.`ID`<b.`ID` GROUP BY a.id,a.`flow_id`) a1 LEFT JOIN dda c ON a1.id=c.id LEFT JOIN dda c1 ON a1.newid=c1.id
to wwwwb mysql临时表不允许被多次引用在同一查询中 也就是不允许使用SELECT a.id,a.`flow_id`,MIN(b.id) AS newid FROM dda a LEFT JOIN dda b ON a.`flow_id`=b.`flow_id` AND a.`ID`<b.`ID`中的,a,b,c这样的虚拟表
MySQL 几乎模拟了 Oracle,SQL Server等商业数据库的大部分功能,函数。但很可惜,到目前的版本(5.1.33)为止,仍没有实现ROWNUM这个功能。 下面介绍几种具体的实现方法.建立实验环境如下mysql> create table tbl ( -> id int primary key, -> col int -> );Que...
select *, @a:=@a+1 from tt
这种方法不能在视图中使用
ID flow_id 姓名 时间
1 223 张三 2011/8/18 15:47
2 223 李四 2011/8/19 19:47
6 223 王五 2011/8/20 15:47
7 223 麻子 2011/8/21 15:27
8 2238 张三 2011/8/12 15:47
11 2238 李四 2011/8/14 19:47
12 2238 王五 2011/8/22 15:47
15 2238 赵四 2011/8/28 15:27
16 2236 张三 2011/8/15 15:47
18 2236 赵三 2011/8/24 19:47
19 2236 王五 2011/8/25 15:47
21 2236 赵四 2011/8/29 15:27我想通过一系列SQL语句处理之后得出以下表结构:
ID flow_id 姓名 时间 处理时间 平均用时
1 223 张三 2011/8/18 15:47 1天4小时 97.333小时
2 223 李四 2011/8/19 19:47 1天4小时 106小时
6 223 王五 2011/8/20 19:47 1天0小时10分 88小时
7 233 麻子 2011/8/21 19:57
8 2238 张三 2011/8/12 19:57 2天0小时 97.333小时
11 2238 李四 2011/8/14 19:57 8天0小时 106小时
12 2238 王五 2011/8/22 19:57 6天0小时 88小时
15 2338 赵四 2011/8/28 19:57
16 2236 张三 2011/8/15 19:57 9天0小时 97.333小时
18 2236 赵三 2011/8/24 19:57 1天0小时 24小时
19 2236 王五 2011/8/25 19:57 4天0小时 88小时
21 2336 赵四 2011/8/29 19:57 即下一行的时间减去上一行的时间得出处理时间
平均用时为某个人每次用时除以次数
比如张三(1天4小时 + 2天0小时+9天0小时)/3=97.333小时
因为张三出现3次
UPDATE dd a inner join (select @a:=@a+1 as newid,`ID` from dd ) b on a.`ID`=b.id SET a.id=newid ;SELECT a.*,TIMEDIFF(b.`时间`,a.`时间`) AS 处理时间,dd AS 平均用时
FROM dd a LEFT JOIN dd b ON a.`ID`=b.`ID`-1 AND a.`flow_id`=b.`flow_id`
INNER JOIN
(
SELECT 姓名,SUM(aa)/(3600*(SELECT COUNT(*) FROM dd WHERE `姓名`=a1.`姓名`)) AS dd,
(SELECT COUNT(*) FROM dd WHERE `姓名`=a1.`姓名`)
FROM (
SELECT a.*,b.`时间` AS bsj,TIMEDIFF(b.`时间`,a.`时间`) AS aa
FROM dd a LEFT JOIN dd b ON a.`ID`=b.`ID`-1 AND a.`flow_id`=b.`flow_id`
) a1 GROUP BY 姓名
) c1
ON a.`姓名`=c1.`姓名`
;
SELECT a.id,a.`flow_id`,MIN(b.id) AS newid FROM dda a LEFT JOIN dda b ON a.`flow_id`=b.`flow_id` AND a.`ID`<b.`ID`
GROUP BY a.id,a.`flow_id`) a1
LEFT JOIN dda c ON a1.id=c.id
LEFT JOIN dda c1 ON a1.newid=c1.id
mysql临时表不允许被多次引用在同一查询中
也就是不允许使用SELECT a.id,a.`flow_id`,MIN(b.id) AS newid FROM dda a LEFT JOIN dda b ON a.`flow_id`=b.`flow_id` AND a.`ID`<b.`ID`中的,a,b,c这样的虚拟表