Выбор X числовых значений, наиболее удаленных друг от друга - PullRequest
0 голосов
/ 09 июля 2019

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

Например, задано:

1
2
3
4
5
6
7
8
9

Для X = 3 он может вернуть: 1,5,9

Для X = 5 он может вернуть: 1,3,5,7,9

Ответы [ 2 ]

2 голосов
/ 09 июля 2019

Это может быть ответом. Просто измените @x и @t

@x - количество нужных вам чисел

@t - количество последовательных чисел в вашем наборе

declare @x int = 5
declare @t int = 9
;with ct as (
    -- this section is just for generating sequence numbers
    select top (@t) N = ROW_NUMBER() over (order by object_id)
    from sys.tables
)
select N
from ct 
where N % ((@t / @x) + 1) = 1 or N = 1

Пример результатов для вашего примера

enter image description here

enter image description here

0 голосов
/ 09 июля 2019

Требуются первое и последнее значения, а затем значения между ними. Это что-то вроде:

select t.*
from (select t.*, row_number() over (order by n) as seqnum,
             count(*) over () as cnt
      from t
     ) t
where seqnum = 1 or seqnum = cnt or
      seqnum % (cnt / nullif((@x - 1, 0))) = 1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...