SQL выбирает конкретную строку на основе ключа при выполнении выбора отдельного / группировать по - PullRequest
0 голосов
/ 26 октября 2018

У меня есть набор данных, похожий на следующий:

|   ID    |   Match1    |   Match2    |    Key     |     Val1   |
|   1     |     a       |    b        |     a      |      a     | 
|   2     |     a       |    b        |     c      |      b     |
|   3     |     a       |    b        |    keep    |      c     |
|   4     |     a       |    a        |     a      |      d     |

Вы увидите, что строки 1-3 имеют совпадающие значения в Match1 и Match2, а строка 3 имеет "keep" в столбце Key.

Я пытаюсь написать запрос, который отбросит строки 1 и 2 на основе критериев соответствия, но сохранил строку 3 из-за предоставленного ключа.Полученный набор данных будет выглядеть следующим образом:

|   ID    |   Match1    |   Match2    |    Key     |     Val1   |
|   3     |     a       |    b        |    keep    |      c     |
|   4     |     a       |    a        |     a      |      d     |

Какие-либо предложения о том, как заставить эту работу работать?

1 Ответ

0 голосов
/ 26 октября 2018

Позвольте мне угадать , что вы хотите одну строку для комбо match1 / match2, с предпочтением "keep".Если это так:

select t.*
from t
where t.id = (select t2.id
              from t t2
              where t2.match1 = t.match1 and t2.match2 = t.match2
              order by (key = 'keep') desc,  -- highest preference for "keep"
                       id desc               -- most recent id
              limit 1
             );

Для обработки NULL s вы можете использовать NULL безопасное сравнение:

select t.*
from t
where t.id = (select t2.id
              from t t2
              where t2.match1 <=> t.match1 and t2.match2 <= >t.match2
              order by (key = 'keep') desc,  -- highest preference for "keep"
                       id desc               -- most recent id
              limit 1
             );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...