У меня есть таблица с примерными значениями ниже.
|Id|Keyword|insertedon|
|:-|:------|:---------|
|1 | abcd | 13/12/20 |
|2 | cdef | 14/12/20 |
|3 | abcd | 14/12/20 |
|4 | defg | 14/12/20 |
В приведенной выше таблице мне нужны разные значения порядка ключевых слов по порядку вставки по убыванию. Мне нужны последние 5 лучших результатов. Ожидаемый результат:
defc
abcd
cdef
Пожалуйста, дайте мне знать, как этого добиться.
Мне нужны последние 5 лучших различных значений,


Вы можете просто использовать select distinct:
select distinct keyword
from t;
Если вам нужна полная строка, вы можете использовать row_number():
select t.*
from (select t.*,
row_number() over (partition by keyword order by newid()) as seqnum
from t
) t
where seqnum = 1;
Обновлено:
Для отредактированной версии вы можете использовать:
select distinct keyword
from (select top (5) keyword
from t
order by insertedon desc
) k
Мне нужны последние 5 лучших результатов.
Укажите номер строки в порядке убывания столбца даты, а затем выберите строку с номером строки 1.
Запрос
;with cte as(
select [rn] = row_number() over(
partition by [keyword]
order by [insertedon] desc, [id] desc
)
)
select [keyword] from cte
where [rn] = 1;
Если вы ищете последние записи на основе столбца inserton, вы можете найти их с помощью предложения group by, что-то вроде этого:
select keyword, max(insertedon)
from table
group by keyword
order by 2 desc
Вы можете использовать аналитические функции следующим образом:
select t.* from
(select t.*,
row_number() over (partition by keyword order by insertedon desc) as rn,
Dense_rank() over (order by insertedon desc) as dr
from t ) t where rn = 1 and dr <= 5;
Вы получаете 5 лучших результатов с TOP(5) в SQL Server. Вы бы упорядочили ключевые слова по их последней insertedon дате:
select top(5) keyword
from mytable
group by keyword
order by max(insertedon) desc;
Должен ли abcd сортироваться после его первого или последнего вставленного значения?