Это тесно связано с предыдущим вопросом, который я задавал.
У меня есть отношение «многие ко многим» между Публикация и Местоположение .
Таблица соединений называется PostLocations и не имеет ничего, кроме FK. (LocationId, PostId)
Я пытаюсь вернуть верхний пост для каждого местоположения .
Это мой запрос (который был дан в ответе на мой предыдущий вопрос):
SELECT pl.LocationId, p.postid, p.UniqueUri, p.Content, MAX(s.BaseScore) as topscore
from dbo.PostLocations pl
inner join dbo.posts p on pl.PostId = p.PostId
inner join dbo.reviews r on p.postid = r.postid
inner join dbo.scores s on r.scoreid = s.scoreid
group by pl.locationid, p.postid, p.UniqueUri, p.Content
Но проблема в том, что PostLocations может иметь такие записи:
LocationId PostId
1 213213
2 498324
1 230943
Итак, мой приведенный выше запрос возвращает LocationId 1 дважды , потому что он содержит две записи в таблице соединений. Мне нужна только 1 запись для каждого местоположения - верхний пост для locationid.
Я тоже пробовал это:
SELECT l.LocationId, p.postid, p.UniqueUri, p.Content, MAX(s.BaseScore) as topscore
from dbo.PostLocations pl
inner join dbo.Locations l on pl.LocationId = l.LocationId
inner join dbo.posts p on pl.PostId = p.PostId
inner join dbo.reviews r on p.postid = r.postid
inner join dbo.scores s on r.scoreid = s.scoreid
group by l.locationid, p.postid, p.UniqueUri, p.Content
Тот же результат - вот что возвращается:
LocationId PostId UniqueUri Content TopScore
1 213213 some-post pew pew 2.00
2 498324 anot-post blah bl 4.50
1 230943 sadjsa-as asijd a 3.5
Вот что должно вернуться:
LocationId PostId UniqueUri Content TopScore
1 230943 sadjsa-as asijd a 3.5
2 498324 anot-post blah bl 4.50
Поскольку LocationId 1 имеет 2 сообщения, а PostId 230943 имеет наивысший балл, то есть тот, который был возвращен.
Есть идеи о том, что мне не хватает?