Как сгруппировать элементы по пути (графовая структура) и оставить только те, у кого наибольшее количество очков, используя t-sql? - PullRequest
0 голосов
/ 26 сентября 2018

У меня есть таблица с записями и их оценками (таблица «Предложения»):

OfferId     OfferScore
----------- -----------
1           1
2           20
3           3
4           4
5           5
6           6
7           7
8           8

Эти записи могут быть связаны.Все отношения хранятся в таблице «OffersRelation»:

OfferId1    OfferId2
----------- -----------
1           2
1           3
1           4
1           5
2           3
3           5
7           8

Я хочу удалить все связанные идентификаторы (внутри группы) из таблицы «Предложения» и оставить только те, которые имеют наивысший балл.

В моем случае:

Предложения с идентификаторами: 1,2,3,4,5 связаны («группа»), а предложение с идентификатором 2 имеет наивысший балл: 20, поэтому я хочу удалить идентификаторы:1,3,4,5 и оставьте только одного с id: 2 из этой «группы».

Предложение с идентификатором: 6 не имеет связанных элементов (никаких отношений в таблице OffersRelations), поэтомуостается в таблице Предложения.

Предложения с идентификаторами: 7,8 связаны, и Предложение с идентификатором 8 имеет более высокий балл, чем 7, поэтому я хочу удалить предложение с идентификатором 7 и оставить предложение с идентификатором:8 из этой «группы».

Ожидаемый результат в таблице Предложения:

OfferId     OfferScore
----------- -----------
2           20
6           6
8           8

Как это сделать в t-sql?

Данные из примеров:

drop table if exists dbo.Offers
drop table if exists dbo.OffersRelation
CREATE TABLE [dbo].[Offers](
    [OfferId] [int] NOT NULL,
    [OfferScore] [int] NOT NULL
) 
GO

CREATE TABLE [dbo].[OffersRelation](
    [OfferId1] [int] NOT NULL,
    [OfferId2] [int] NOT NULL
) 
GO

INSERT INTO [dbo].[Offers]
           ([OfferId],[OfferScore])
     VALUES (1,1),(2,20),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8)


INSERT INTO [dbo].[OffersRelation]
           ([OfferId1]
           ,[OfferId2])
     VALUES
            (1,2),
            (1,3),
            (1,4),
            (1,5),
            (2,3),
            (3,5),
            (7,8)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...