Поиск уникальной комбинации двух столбцов, где каждое значение появляется один раз - PullRequest
0 голосов
/ 26 мая 2020

Я пытаюсь настроить игровой матч, в котором каждый игрок играет только один раз, и максимально увеличить общее количество игр. Я пытаюсь выяснить, какую комбинацию p1, p2 выбрать из 15 возможных матчей.

Код, который я пробовал: Попытка 1

with cte1 as(
select p1,p2,ROW_NUMBER() over(partition by p1 order by (select 0) desc) rn 
from #tempgame
) ,cte2 as (select p1,p2,ROW_NUMBER() over(partition by p2 order by (select 0) desc) rn 
from cte1
where rn=1
)select * from cte2
where rn = 1

Попытка 2:

    select distinct a.p2,b.p1
    from #tempgame a
    join #tempgame b
    on a.p1 = 
            ( select top 1 a.p1
            from #tempgame b
            where b.p2 = a.p2

            ) 

Мне даже не удалось довести его до такой степени, чтобы выполняет первое условие: каждый игрок играет только один раз, не говоря уже о максимальном количестве матчей.

Я уже определил, основываясь на доступности игроков, что возможны только эти матчи, и взял средний диапазон их доступности для определения игрового времени. Поэтому я не могу просто взять стол игроков и назначить их случайным образом, если их доступные таймфреймы не совпадают. Итак, вопрос прост: какая комбинация p1, p2 разрешена на основе простой таблицы p1, p2?

select * 
INTO #tempgame
from (
select  76561197987822470 p1,76561198040907827 p2 union all 
select 76561197987822470,76561198088336999 union all
select 76561197987822470,76561198095503172 union all
select 76561197987822470,76561198397303730 union all
select 76561198001599297,76561198397303730 union all
select 76561198001599297,76561198321977951 union all
select 76561198001599297,76561198095503172 union all
select 76561198040907827,76561198088336999 union all
select 76561198040907827,76561198095503172 union all
select 76561198040907827,76561198397303730 union all
select 76561198088336999,76561198397303730 union all
select 76561198088336999,76561198095503172 union all
select 76561198095503172,76561198397303730 union all
select 76561198095503172,76561198321977951 union all
select 76561198321977951,76561198397303730 
) z

Я считаю, что возможны только 2 матча. Мне все равно, какие именно. Но я не смог найти логического способа вычислить это, кроме проб и ошибок на небольшой выборке.

      P1                           P2
row1 76561197987822470 vs 76561198040907827
row2 76561198001599297 vs 76561198397303730

1 Ответ

0 голосов
/ 26 мая 2020

Я пытаюсь настроить игровой матч, в котором каждый игрок играет только один раз, и максимально увеличить общее количество игр.

Если это ваша цель, начните со столов player и используйте самосоединение:

select p1.player_id, p2.player_id
from players p1 join
     players p2
     on p1.player_id < p2.player_id

Я не уверен, что gametime имеет отношение к вопросу - или на самом деле, какое отношение к нему имеют данные или запрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...