用group by 代替子查询?

为了方便,我就把所有的数据 弄一部份出来

id  gameid  no  description     sportid     leagueid    islive  lstatus     awaySpread  awayPrice   homeSpread  homePrice   status  datatime
1   411367404   0   2nd Half    4   487     0   2   0   0.952   0   0.952   3   2014-11-20 14:00:37
2   417000075   0   Game    4   481     0   0   10.5    0.98    -10.5   0.925   1   2014-11-20 14:03:56
3   417000075   1   Game    4   481     0   0   11.5    1.14    -11.5   0.781   1   2014-11-20 14:03:56
4   417000075   2   Game    4   481     0   0   11  1.06    -11     0.847   1   2014-11-20 14:03:56
5   417000075   3   Game    4   481     0   0   10  0.9     -10     1   1   2014-11-20 14:03:56
6   417000075   4   Game    4   481     0   0   9.5     0.826   -9.5    1.08    1   2014-11-20 14:03:56
7   416828494   0   Game    4   482     0   0   -5  0.943   5   0.961   1   2014-11-20 14:03:56
8   416828494   1   Game    4   482     0   0   -6  0.769   6   1.16    1   2014-11-20         14:03:56
9   416828494   2   Game    4   482     0   0   -5.5    0.862   5.5     1.05    1   2014-11-20     14:03:56
10  416828494   3   Game    4   482     0   0   -4.5    1.03    4.5     0.877   1   2014-11-20 14:03:56
11  416828494   4   Game    4   482     0   0   -4  1.13    4   0.787   1   2014-11-20 14:03:56
12  416828560   0   Game    4   482     0   0   3.5     1   -3.5    0.909   1   2014-11-20 14:03:56
13  416828560   1   Game    4   482     0   0   4.5     1.19    -4.5    0.751   1   2014-11-20 14:03:56
14  416828560   2   Game    4   482     0   0   4   1.09    -4  0.819   1   2014-11-20 14:03:56
15  416828560   3   Game    4   482     0   0   3   0.9     -3  0.99    1   2014-11-20 14:03:56
16  416828560   4   Game    4   482     0   0   2.5     0.819   -2.5    1.09    1   2014-11-20 14:03:56
17  411367404   0   2nd Half    4   487     0   2   0   0.952   0   0.952   3   2014-11-20 14:03:56
8   416828494   0   Game    4   482     0   0   -5  0.952   5   0.952   1   2014-11-20 14:08:36
19  416828494   1   Game    4   482     0   0   -6  0.781   6   1.15    1   2014-11-20 14:08:36
20  416828494   2   Game    4   482     0   0   -5.5    0.869   5.5     1.04    1   2014-11-20 14:08:36
21  416828494   3   Game    4   482     0   0   -4.5    1.04    4.5     0.869   1   2014-11-20 14:08:36
22  416828494   4   Game    4   482     0   0   -4  1.14    4   0.781   1   2014-11-20 14:08:36
23  416828494   0   Game    4   482     0   0   -5  0.943   5   0.961   1   2014-11-20 14:08:43
24  416828494   1   Game    4   482     0   0   -6  0.769   6   1.16    1   2014-11-20 14:08:43
5   416828494   2   Game    4   482     0   0   -5.5    0.862   5.5     1.05    1   2014-11-20 14:08:43
6   416828494   3   Game    4   482     0   0   -4.5    1.03    4.5     0.877   1   2014-11-20 14:08:43
7   416828494   4   Game    4   482     0   0   -4  1.13    4   0.787   1   2014-11-20 14:08:43
28  416828494   0   Game    4   482     0   0   -5  0.952   5   0.952   1   2014-11-20 14:08:56
29  416828494   1   Game    4   482     0   0   -6  0.781   6   1.15    1   2014-11-20 14:08:56
30  416828494   2   Game    4   482     0   0   -5.5    0.869   5.5     1.04    1   2014-11-20 14:

现我的目的是要抓的一大堆的数据,其中以 gameid no dscrn sporid 相同的抓出来,但其中里面的我只要最新的也就是max(id) 最新的

抓出来的资料如

3721    417000075   0   Game    4   481     0   0   10.5    0.952   -10.5   0.952   1   2014-11-20 15:33:56
3722    417000075   1   Game    4   481     0   0   11.5    1.11    -11.5   0.806   1   2014-11-20 15:33:56
3723    417000075   2   Game    4   481     0   0   11  1.03    -11     0.869   1   2014-11-20 15:33:56
3724    417000075   3   Game    4   481     0   0   10  0.869   -10     1.03    1   2014-11-20 15:33:56
3725    417000075   4   Game    4   481     0   0   9.5     0.806   -9.5    1.11    1   2014-11-20 15:33:56
3731    416828560   0   Game    4   482     0   0   3   0.934   -3  0.97    1   2014-11-20 15:33:56
3732    416828560   1   Game    4   482     0   0   4   1.12    -4  0.793   1   2014-11-20 15:33:56
3733    416828560   2   Game    4   482     0   0   3.5     1.03    -3.5    0.877   1   2014-11-20 15:33:56
3734    416828560   3   Game    4   482     0   0   2.5     0.847   -2.5    1.06    1   2014-11-20 15:33:56
3735    416828560   4   Game    4   482     0   0   2   0.763   -2  1.17    1   2014-11-20 15:33:56
3736    411367404   0   2nd Half    4   487     0   2   0   0.952   0   0.952   3   2014-11-20 15:33:56
3902    416828494   0   Game    4   482     0   0   -5.5    0.961   5.5     0.943   1   2014-11-20 15:35:35
3903    416828494   1   Game    4   482     0   0   -6.5    0.793   6.5     1.13    1   2014-11-20 15:35:35
3904    416828494   2   Game    4   482     0   0   -6  0.869   6   1.03    1   2014-11-20 15:35:35
3905    416828494   3   Game    4   482     0   0   -5  1.05    5   0.847   1   2014-11-20 15:35:35
3906    416828494   4   Game    4   482     0   0   -4.5    1.15    4.5     0.775   1   2014-11-20 15:35:35

所下的语法如下: (部份域名因 比较长,版面问题有缩短一点)

select * from GAME_spread a WHERE a.id=(SELECT MAX(id) FROM GAME_spread b WHERE b.gameid=a.gameid AND b.description=a.description AND a.sportid=b.sportid AND a.no=b.no)

但重点是 「搜寻时间需要2.多秒」,有点太长

有没有办法用group by 或其他方式,让速度更快

阅读 3.9k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题