Выбор только 1-й и 10-й записей - PullRequest
0 голосов
/ 18 марта 2019

Иметь таблицу с 3 столбцами: ID, Подпись и Дата и время, и она сгруппирована по Сигнатурам, имеющим счет (*)> 9.

select * from (
    select s.Signature 
    from #Sigs s
    group by s.Signature 
    having count(*) > 9
) b
join #Sigs o 
on o.Signature = b.Signature
order by o.Signature desc, o.DateTime

Теперь я хочу выбрать только 1-ю и 10-ю записи для каждой подписи. То, что определяет ранг, это дата и время по убыванию. Таким образом, я ожидаю, что каждая подпись будет иметь 2 строки.

Спасибо

Ответы [ 2 ]

0 голосов
/ 18 марта 2019

Я бы пошел с парой общих табличных выражений.
Первая выберет все записи из таблицы, а также количество записей на подпись, а вторая выберет одну из первых, где количество записей> 9, и добавит row_number, разделенный по сигнатуре, а затем просто выберет тот, в котором row_number 1 или 10:

With cte1 AS
(
    SELECT ID, Signature, Datetime, COUNT(*) OVER(PARTITION BY Signature) As  NumberOfRows
    FROM #Sigs    
), cte2 AS
(
    SELECT ID, Signature, Datetime, ROW_NUMBER() OVER(PARTITION BY Signature ORDER BY DateTime DESC) As Rn
    FROM cte1
    WHERE NumberOfRows > 9
)

SELECT ID, Signature, Datetime
FROM cte2
WHERE Rn IN (1, 10)
ORDER BY Signature desc
0 голосов
/ 18 марта 2019

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

Самый простой способ, поскольку вы уже знаете свой порядок сортировки (DateTime DESC) и разбиения (Signature).), вероятно, назначить номера строк и затем выбрать нужные строки.

SELECT *
FROM
(
select o.Signature
      ,o.DateTime
      ,ROW_NUMBER() OVER (PARTITION BY o.Signature ORDER BY o.DateTime DESC) [Row]
    from (
        select s.Signature 
        from #Sigs s
        group by s.Signature 
        having count(*) > 9
    ) b
    join #Sigs o 
    on o.Signature = b.Signature
    order by o.Signature desc, o.DateTime
)
WHERE [Row] IN (1,10)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...