SQL: получить топ-7 записей, добавленных за последнюю неделю - PullRequest
0 голосов
/ 27 апреля 2019

Я новичок в SQL, и мне нужна помощь для запроса, который должен возвращать верхнюю часть вхождений, отсортированных по дате.

На самом деле у меня есть таблица, в которую добавляются поисковые запросы, выполненные пользователями наряду с датой.поиска (столбец в формате DATETIME).То, что я хотел бы сделать, это создать список «Тенденции поиска», который бы отображал 7 самых популярных запросов, выполненных за последнюю неделю (например, с воскресенья по воскресенье), но я не уверен, с чего начать.

Я слышал о функции DATEPART, но не знаю, как ее использовать в топ-7 событий.

Заранее спасибо за помощь и хорошего дня!

Ответы [ 4 ]

1 голос
/ 27 апреля 2019

Это работает?

declare @lastweek datetime
declare @now datetime
set @now = getdate()
set @lastweek = dateadd(day,-7,@now)


SELECT COUNT(g.searchTerm) AS appearanceCount, g.searchTerm FROM DesiredTable AS g
WHERE g.DateSearched  BETWEEN @lastweek AND @now
GROUP BY(GameTypeId)
ORDER BY (appearanceCount) DESC
1 голос
/ 27 апреля 2019

Упоминание datepart() предполагает SQL Server.Если это так, вы можете сделать:

select top (7) s.searchTerm, count(*)
from searches s
where s.searchTime >= dateadd(day, -7, getdate())
group by s.searchTerm
order by count(*) desc;

Это возвращает последние 7 дней текущего времени.

Если вы хотите, чтобы на прошлой неделе, довольно просто where было:

where datediff(week, s.searchTime, getdate()) = 1
0 голосов
/ 27 апреля 2019

дополнительно: для получения первых n (здесь 7) строк используйте rownum <= 7.Вот так (добавлено в решение Gegenwinds): </p>

SELECT result.* FROM 
(SELECT count(id), searchTerm FROM searches 
WHERE searchDate >= curdate() - INTERVAL DAYOFWEEK(curdate())+6 DAY
AND searchDate < curdate() - INTERVAL DAYOFWEEK(curdate())-1 DAY
GROUP BY searchTerm) result
ORDER BY count(id) DESC
WHERE rownum<= 7
0 голосов
/ 27 апреля 2019

Эта проблема легко решаема с помощью MySQL.Насколько я понял, вы пытаетесь сделать несколько вещей:

1.Получить результаты поиска с прошлой недели

С помощью полей DATETIME можно довольно легко извлечь неделю года:

SELECT id FROM searches 
WHERE searchDate >= curdate() - INTERVAL DAYOFWEEK(curdate())+6 DAY
AND searchDate < curdate() - INTERVAL DAYOFWEEK(curdate())-1 DAY

Как указано здесь .

2.Получите 7 самых популярных из них

Во-вторых, вы сказали, что хотите получить 7 самых популярных запросов, которые переводят в наиболее часто встречающиеся поисковые запросы .Другими словами: вам нужно сгруппировать одинаковые поисковые термины и сосчитать их:

SELECT count(id), searchTerm FROM searches 
WHERE searchDate >= curdate() - INTERVAL DAYOFWEEK(curdate())+6 DAY
AND searchDate < curdate() - INTERVAL DAYOFWEEK(curdate())-1 DAY
GROUP BY searchTerm
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...