Oracle - некоторые проблемы с групповыми операциями - PullRequest
0 голосов
/ 10 ноября 2011

Мне нужна ваша помощь ... Я пытался больше времени, но не могу найти решение (я думаю, это просто, но у меня есть ошибки в Oracle :( :()

пример: у меня есть стол с команды: какая команда играла gameDate: когда играли goalHours: когда команда A или команда B делают гол 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

Мне нужен выбор со всей отчетливой командой A-VS-teamB Последняя игра Дата мне нужно для каждой отдельной команды A-VS-teamB, в их последней игре, отдельные часы числа часов-часов, сумма чисел-ворот и время остановки игры.

как то так:

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 DifferentGoalHours и 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 ]

1 голос
/ 10 ноября 2011

Как и любой другой 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> 
0 голосов
/ 10 ноября 2011

Вам необходимо включить gameDate в группу по. Что-то вроде:

SELECT  teams
    ,   gameDate
    ,   MAX( endDate )
    ,   SUM( goalNumber )
    ,   COUNT( DISTINCT goalHours )
FROM    myTable
GROUP BY teams
    ,    gameDate
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...