2011-01-20 14 views
1

我需要用下面的查询有助于在一定期限内最大的价值,我会后的表的例子。计数的时间

 player | goals | gamedate 

playername1 | 1 | 2011-01-01 
playername2 | 2 | 2011-01-01 
playername1 | 1 | 2011-01-02 
playername3 | 1 | 2011-01-01 
playername1 | 2 | 2011-01-03 
playername1 | 1 | 2011-01-01 
playername3 | 1 | 2011-01-01 
playername2 | 2 | 2011-01-01 
playername1 | 1 | 2011-01-04 

有很多更像数据我想知道我怎么可以编写一个查询,将给予进球最多的顶级球员的时间(比赛季)一定时期之间?

编辑:看来我是在数据结构化的方式错了。我很抱歉。我将离开前面的表格,以便每个人都能看到第一个答案。我不想开一个新的问题,因为它本质上是一回事。我的道歉Haim。

`table1` 
    id | gamedate 

1 | 2011-01-01 
2 | 2011-01-02 
3 | 2011-01-03 
4 | 2011-01-04 
5 | 2011-01-05 


`table2` 
id | gameid |  player | goals 

1 | 1  | playername1 | 1 
2 | 1  | playername2 | 2 
3 | 2  | playername1 | 1 
4 | 1  | playername3 | 1 
5 | 3  | playername1 | 2 
6 | 4  | playername1 | 1 
7 | 2  | playername3 | 1 
8 | 3  | playername2 | 2 
9 | 5  | playername1 | 1 

哪里gameid是可以被标识在table1引用的外键。

回答

1

替换您想要检查的日期, 并将限制(在该示例中为5)设置为您想要的玩家数量。

SELECT player , sum(goals) AS top_scores FROM mytable 
WHERE gamedate BETWEEN '2011-01-02' AND '2011-01-07' 
GROUP BY player ORDER BY top_scores DESC LIMIT 5 

EDIT(根据问题的编辑,你需要的是添加一个连接):

SELECT player , sum(goals) AS top_scores FROM table2 t2 
LEFT JOIN table1 t1 ON t1.id = t2.gameid 
WHERE gamedate BETWEEN '2011-01-02' AND '2011-01-07' 
GROUP BY player ORDER BY top_scores DESC LIMIT 5 
+0

嗨哈伊姆。我编辑了我的问题,并希望你原谅我粗心的错误。 – Tek 2011-01-20 11:28:20