Oracle - 集团运营的一些问题

时间:2011-11-10 12:47:09

标签: oracle select grouping

我需要你的帮助...我尝试了更多的时间,但找不到解决方案(我认为这很简单,但我在oracle中有错误:( :()

一个例子: 我有一张桌子 球队:球队的表现 gameDate:玩的时候 goalHours:当teamA或teamB做一个目标时 goalNumber:在同一时间内完成了多少目标 endGame:完成游戏时

teams            gameDate goalHours goalNumber endGame  
team01-VS-team02 20110901 21 2 20110902
team01-VS-team02 20110901 22 1 20110902
team01-VS-team02 20110901 23 3 20110902
team03-VS-team02 20110902 18 3 20110905 
team03-VS-team02 20110902 19 1 20110905
team04-VS-team02 20110904 06 5 20110906
team01-VS-team02 20110101 18 1 20110902

我需要选择所有不同的teamA-VS-teamB最后一个gameDate 我需要每个不同的球队A-VS-teamB,在他们的最后一场比赛中,目标时间的不同时间,goalNumber的总和,以及何时停止比赛。

类似的东西:

teams            lastGameDate distinctGoalHours sumGoalNumber endGame  
team01-VS-team02 20110901 3 6 20110902
team03-VS-team02 20110902 2 4 20110905 
team04-VS-team02 20110904 1 5 20110906

我尝试:

SELECT   teams,
MAX(gameDate),
MAX (endDate),
SUM (goalNumber),
COUNT (DISTINCT goalHours)
       FROM myTable
GROUP BY teams

这个选择效果不好,因为我不想算数 team01-VS-team02 20110101 18 1 20110902,这不是最后一场比赛日期。 有了这个选择我有4个distinctGoalHours和7个sumGoalNumber。

我需要选择

team01-VS-team02 20110901 3 6 20110902
team03-VS-team02 20110902 2 4 20110905
team04-VS-team02 20110904 1 5 20110906

...我希望我能向您展示您需要的所有信息,非常感谢您! :D

2 个答案:

答案 0 :(得分:1)

与任何其他SQL一样,您需要使用适当的过滤器限制结果集。在您的情况下,您需要使用子查询来识别每个团队的最新gameDate

有几种不同的方法可以实现这一点。这是一个有效的方法:

SQL> SELECT   teams,
            MAX(gameDate),
            MAX (endGame),
            SUM (goalNumber),
            COUNT (DISTINCT goalHours)
FROM  myTable
WHERE (teams, gameDate) IN
    ( select teams, max(gameDate)
      from myTable
      GROUP BY teams )
GROUP BY teams
/
  2    3    4    5    6    7    8    9   10   11   12  
TEAMS                          MAX(GAMED MAX(ENDGA SUM(GOALNUMBER) COUNT(DISTINCTGOALHOURS)
------------------------------ --------- --------- --------------- ------------------------
team03-VS-team02               02-SEP-11 05-SEP-11               4                        2
team01-VS-team02               01-SEP-11 02-SEP-11               6                        3
team04-VS-team02               04-SEP-11 06-SEP-11               5                        1

SQL> 

答案 1 :(得分:0)

您需要将gameDate包含在组中。类似的东西:

SELECT  teams
    ,   gameDate
    ,   MAX( endDate )
    ,   SUM( goalNumber )
    ,   COUNT( DISTINCT goalHours )
FROM    myTable
GROUP BY teams
    ,    gameDate