Я пытаюсь найти данные, относящиеся к максимальным данным для отдельной комбинации данных, а не к максимальной дате для всех данных.Я искал похожие проблемы, но, похоже, моя проблема в другом.Я проверил
Как выбрать строки со столбцами MAX (значение столбца), DISTINCT по MULTIPLE в SQL Получить максимальную дату - для каждой транзакции
Вот мой код, который возвращает все данные:
select top.name as [familyName], s.sportName, p.position, bottom.firstName as [firstName], a.awardAmount, a.awardDate
from familyRelation r
inner join family bottom on r.firstNameID = bottom.NameID
inner join family top on r.familyID = top.NameID
inner join familyPosition p on p.NameID = bottom.NameID
inner join sport s on s.sportID = p.sportID
left join awards a on a.awardID = p.familyPositionID
familyName sport position firstName award awardDate
Smith tennis umpire mary null 1/1/2011
Smith tennis umpire mary 100 10/20/2011
Smith swim diver mary null 1/1/2019
Smith diving diver susan 300 1/1/2011
Jones rugby player henry 100 1/1/2016
Jones rugby player henry 150 1/1/2011
Jones rugby forward henry 190 1/1/2008
Jones rugby forward henry 100 1/1/2011
Adams hockey goalkeeper grant null 1/1/2011
Adams hockey goalkeeper grant null 12/12/2018
Adams hockey goalkeeper grant null 1/1/2011
Adams hockey goalkeeper grant 5750 1/1/2011
, но мне нужно вернуть данные, относящиеся к максимальной дате комбинации (family, sport, position, firstName), как показано ниже:
familyName sport position firstName award awardDate
Smith tennis umpire mary 100 10/20/2011
Smith swim diver mary 150 1/1/2019
Smith diving diver susan 300 1/1/2011
Jones rugby player henry 190 1/1/2016
Jones rugby forward henry 100 1/1/2011
Adams hockey goalkeeper grant null 12/12/2018
Это отношения между таблицами семейства и имени. Таблица семейства.
familyId firstNameID
100 10
100 20
200 30
300 40
таблица семейства
NameID name
10 mary
20 susan
30 henry
40 grant
100 smith
200 jones
300 adams
Я пробовал, но для всех используется одна и та же максимальная датастроки, которые я не хочу, потому что разные комбинации (семья, спорт, должность, имя, отчество) имеют разные максимальные даты:
select top.name as [familyName], s.sportName, p.position, bottom.firstName as [firstName], a.awardAmount, a.awardDate
from familyRelation r
inner join family bottom on r.firstNameID = bottom.NameID
inner join family top on r.familyID = top.NameID
inner join familyPosition p on p.NameID = bottom.NameID
inner join sport s on s.sportID = p.sportID
left join ( select awardAmount, max(awardDate)
from awards
group by awardAmount) a
on a.aID = p.p.familyPositionID
Спасибо за вашу помощь.Я не могу понять это.
обновление: я пытался использовать row_number (), но код все еще не возвращает нужные мне результаты.Мне нужно включить a.awardAmount, но как только я его добавлю, максимальная дата не будет определена, потому что суммы вознаграждений различны
select top.name as [familyName], s.sportName, p.position, bottom.firstName as [firstName], a.awardAmount, a.awardDate
, row_number() over partition by top.name, s.sportName, p.position, bottom.firstName
order by top.name, s.sportName, p.position, bottom.firstName)
from familyRelation r
inner join family bottom on r.firstNameID = bottom.NameID
inner join family top on r.familyID = top.NameID
inner join familyPosition p on p.NameID = bottom.NameID
inner join sport s on s.sportID = p.sportID
left join awards a on a.awardID = p.familyPositionID