我需要你的帮助...我尝试了更多的时间,但找不到解决方案(我认为这很简单,但我在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
答案 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