Отдельное конкретное поле в запросе выбора

У меня есть таблица с примерными значениями ниже.

|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

Пожалуйста, дайте мне знать, как этого добиться.

Должен ли abcd сортироваться после его первого или последнего вставленного значения?

jarlh 14.12.2020 14:42

Мне нужны последние 5 лучших различных значений,

Sriram Tamilarasan 14.12.2020 14:45
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
2
57
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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 лучших результатов.

Sriram Tamilarasan 14.12.2020 14:42

Укажите номер строки в порядке убывания столбца даты, а затем выберите строку с номером строки 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;

Другие вопросы по теме