sql - для каждого уникального значения в столбце образца 2 разных значения из другого столбца

Я застрял на сложной проблеме агрегата SQL.

Рассмотрим следующую таблицу / представление:

Column1  Column2
1        2564
2        6550
1        3578
2        6548
2        4789
1        9876

Я хотел бы разработать запрос, чтобы сделать следующее:

Для каждого отдельного значения Column1 выберите 2х записей. Стратегия выборки может быть своего рода начальной загрузкой / повторной выборкой, поскольку точек данных может быть не слишком много.

Таким образом таблица станет:

Column1     Column2
1           9876
1           3578
2           6548
2           6550

Платформа: MS SQL

Любые ответы приветствуются.

1 ответ

Решение

Для случайной выборки без замены:

select t.*
from (select t.*,
             row_number() over (partition by column1 order by newid()) as seqnum
      from t
     ) t
where seqnum <= 2;

Или, альтернативно:

select top (2) with ties t.*
from t
order by row_number() over (partition by id order by newid());

Для случайной выборки с заменой:

С заменой:

select *
from ((select top (1) with ties t.*
       from t
       order by row_number() over (partition by id order by newid())
      )
      union all
      (select top (1) with ties t.*
       from t
       order by row_number() over (partition by id order by newid())
      )
     ) x;
Другие вопросы по тегам