Как отмечает @Jon, вам необходимо удалить те элементы, которые НЕ применимы к конкретному человеку.Затем, поскольку у @Ord был самый близкий образец, было бы лучше предварительно запросить результаты в отдельной таблице (не временной, поскольку MySQL захлебнется, пытаясь запросить себя при самосоединении во втором запросе).
Итак, для меня (я был боулером лиги несколько лет назад) и ваш контент, охватывающий ВСЕ лиги, никогда не будет двух разных лиг на одной линии в одно и то же время в течение всего вечера, однакоу вас могут быть разные лиги, начинающиеся в разное время ... 6-8: 30, 8: 45-11, например ... так что группировка по лиге и дате будет работать.Однако вам НУЖНО, чтобы игрок как часть группы получил соответствующие значения SUM ().
Чтобы уточнить ответы, предположим, что у меня есть следующие данные.Эти данные будут представлять только одну линию, одну неделю, один сезон, но две лиги и 3 игрока в каждой лиге (с единственной целью показать результаты и ограничить содержание здесь)
League Player Score
L1 1 223
L1 1 218
L1 1 204
L1 2 187
L1 2 201
L1 2 189
L1 3 148
L1 3 152
L1 3 158
L2 4 189
L2 4 195
L2 4 192
L2 5 182
L2 5 199
L2 5 209
L2 6 228
L2 6 234
L2 6 218
CREATE TABLE SeriesScores2
SELECT
Season,
LeagueName,
LaneNumber,
WeekNumber,
PlayerID,
SUM(Score) AS Series
FROM
Scores
GROUP BY
Season,
LeagueName,
LaneNumber,
WeekNumber,
PlayerID;
Первый запрос (выше)создаст, создаст серию для всех игроков всех недель, всех лиг и т. д. Предположим, что я добавил в общий сезон, полосу, неделю тоже
Season League Lane Week Player Series
1 L1 1 1 1 645
1 L1 1 1 2 577
1 L1 1 1 3 458
1 L2 1 1 4 576
1 L2 1 1 5 590
1 L2 1 1 6 680
Это дает нам предвестник для определенияmax (), в противном случае нам пришлось бы дублировать запрос внутри себя и на внешнем уровне, что усложняет его, чем предварительная агрегация.
Теперь указанная выше постоянная таблица (может быть удалена ПОСЛЕ получения результатов)запросите ПЕРВЫЙ (PreQuery) максимальный балл за ЛИГУ на ЛЮБОЙ ... Например: как правило, у мужской лиги, как правило, более высокие результаты в серии, чем у женщин ... схожие с разными возрастными группами.Итак, наивысшая оценка мужской лиги Lane 1 и женской лиги Lane 1 наивысшая оценка и т. Д. Наибольшая оценка, как правило, определяется одной неделей из всего сезона, а не самой высокой серией на линию каждую неделю.
Теперь, PreQueryПсевдоним "ss" относится только к сезону, лиге, лэйну и максимальным сериям.Как только это станет известно, самостоятельно присоединитесь к серии баллов, чтобы набрать ВОЗ DID этот самый высокий балл на указанной полосе и выяснить, кто и на какой неделе это произошло
select
ss.season,
ss.leaguename,
ss.lanenumber,
ss.highestSeries,
ss2.PlayerID,
ss2.WeekNumber
from
( select season, leaguename, lanenumber, max( series ) highestSeries
from SeriesScores2
group by season, leaguename, lanenumber ) ss
join SeriesScores2 ss2
on ss.Season = ss2.Season
and ss.LeagueName = ss2.LeagueName
and ss.LaneNumber = ss2.LaneNumber
and ss.HighestSeries = ss2.Series
Теперь из приведенного выше запроса ...давайте разберемся с этим.Если мы возьмем внутренний запрос "ss"
( select season, leaguename, lanenumber, max( series ) highestSeries
from SeriesScores2
group by season, leaguename, lanenumber ) ss
, мы получим самые высокие оценки по лиге (например: мужская лига против женской лиги на той же неделе, в ту же ночь, на той же линии, и мы находим (ниже),просто по максимуму, но у вас нет ВОЗ или какой недели, только самые высокие серии были выбиты вне зависимости от недели или человека. Таким образом, ЭТО становится основой ПРИСОЕДИНЕНИЯ к предварительно агрегированной таблице «SeriesScores2», но здесь мы имеемнаивысший балл серии, чтобы убедиться, что мы нашли правильного человека
Season League Lane HighestSeries
1 L1 1 645
1 L2 1 680
To refresh preaggregation
Season League Lane Week Player Series
1 L1 1 1 1 645 <-- Join finds THIS entry League 1
1 L1 1 1 2 577
1 L1 1 1 3 458
1 L2 1 1 4 576
1 L2 1 1 5 590
1 L2 1 1 6 680 <-- Join finds THIS entry League 2
Итак, мои оригинальные запросы работали так, как я их проверял перед публикацией. Я не знаю, какой у вас сбой, если только имя столбца не верноеили что-то в этом роде. Что касается столбца «Дата», мне было все равно, потому что у вас был номер недели, который соответствовал бы неделе боулинга и в любом случае имел бы отношение 1: 1 к дате. Столбец датыможно было бы добавить к предварительной агрегации SeriesScores2 и использовать при получении идентификатора человека и недели.Несколько ночей на той же неделе, ТОГДА вам понадобится точная дата).
Надеюсь, это прояснит ваши вопросы / комментарии.