有这个一样一张表,表的结构如下:
+------+----------+-----------+------+---------+------------+----------+------------+------+
| id | stage_id | uid | type | victory | start_time | duration | created | star |
+------+----------+-----------+------+---------+------------+----------+------------+------+
| 1116 | 1100011 | 102099607 | 0 | 0 | 1353485788 | 0 | 1353485788 | NULL |
| 1117 | 1100011 | 102099605 | 0 | 0 | 1353485958 | 0 | 1353485958 | NULL |
| 1118 | 1100011 | 102099606 | 0 | 1 | 1353486027 | 183 | 1353486027 | E |
| 1119 | 1100011 | 102099608 | 0 | 0 | 1353486430 | 29 | 1353486430 | |
| 1133 | 1100021 | 102099609 | 0 | 0 | 1353570040 | 109 | 1353570040 | |
| 1134 | 1100021 | 102099609 | 0 | 1 | 1353570626 | 363 | 1353570626 | C |
| 1135 | 1100011 | 102099611 | 0 | 0 | 1353580442 | 657 | 1353580442 | |
+------+----------+-----------+------+---------+------------+----------+------------+------+
这里储存着每个用户在每一关卡的情况,stage_id表示关卡ID,stage_id越大表示关卡越难,created表示结束时间,star表示评级(S表示最好,其次是 A>B>C>D>E,空或NULL表示没有成功)
每个人只有完成这一关,才能玩下一关,一关可以玩很多次。
这个表大约有100W,用户数太约有10W.
现在要统计前100名,完成关卡最难,且评级最高,完成时间最早的用户。
不知道讲清楚没有。。。-|-
我的想法是先把每个用户最难,且评级最高,完成时间最早的关卡提取出来,生成一张临时表,然后再在这个临时表里提取前100名。
但耗时实在太长,约100秒。。。
对了,这个结果要求延时在30分钟以内,再一次吐血,求各位SQL高手解答。
+------+----------+-----------+------+---------+------------+----------+------------+------+
| id | stage_id | uid | type | victory | start_time | duration | created | star |
+------+----------+-----------+------+---------+------------+----------+------------+------+
| 1116 | 1100011 | 102099607 | 0 | 0 | 1353485788 | 0 | 1353485788 | NULL |
| 1117 | 1100011 | 102099605 | 0 | 0 | 1353485958 | 0 | 1353485958 | NULL |
| 1118 | 1100011 | 102099606 | 0 | 1 | 1353486027 | 183 | 1353486027 | E |
| 1119 | 1100011 | 102099608 | 0 | 0 | 1353486430 | 29 | 1353486430 | |
| 1133 | 1100021 | 102099609 | 0 | 0 | 1353570040 | 109 | 1353570040 | |
| 1134 | 1100021 | 102099609 | 0 | 1 | 1353570626 | 363 | 1353570626 | C |
| 1135 | 1100011 | 102099611 | 0 | 0 | 1353580442 | 657 | 1353580442 | |
+------+----------+-----------+------+---------+------------+----------+------------+------+
这里储存着每个用户在每一关卡的情况,stage_id表示关卡ID,stage_id越大表示关卡越难,created表示结束时间,star表示评级(S表示最好,其次是 A>B>C>D>E,空或NULL表示没有成功)
每个人只有完成这一关,才能玩下一关,一关可以玩很多次。
这个表大约有100W,用户数太约有10W.
现在要统计前100名,完成关卡最难,且评级最高,完成时间最早的用户。
不知道讲清楚没有。。。-|-
我的想法是先把每个用户最难,且评级最高,完成时间最早的关卡提取出来,生成一张临时表,然后再在这个临时表里提取前100名。
但耗时实在太长,约100秒。。。
对了,这个结果要求延时在30分钟以内,再一次吐血,求各位SQL高手解答。