MySQL запрос, чтобы получить 50 лучших имен, появляющихся чаще всего за последние 7 дней - PullRequest
1 голос
/ 07 декабря 2011

Таблица MySQL проста:

id | name | create_time

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

1 | "do ABC" | 2011-12-05

2 | "do BCD" | 2011-12-05

Я хочу получить верх50 операций из этой таблицы за последние 7 дней.Как я могу написать SQL?

Ответы [ 4 ]

1 голос
/ 07 декабря 2011

Попробуйте что-то вроде этого:

SELECT `name`, COUNT(id) as operations
FROM myTable
WHERE create_time BETWEEN DATE_SUB(NOW(), INTERVAL -7 DAY) AND NOW()
GROUP BY `name` 
ORDER BY COUNT(id) DESC
LIMIT 50;

Это будет подсчитывать количество операций для каждого имени операции, сортировать результаты по количеству и возвращать только 50 записей.Обратите внимание, что это ровно семь дней истории, другими словами, если вы выполните запрос в полдень, начало диапазона будет полдень 7 дней назад.

См. LIMIT , COUNT , GROUP BY , DATE_SUB

0 голосов
/ 07 декабря 2011

Вы можете получить результат по этому запросу

select id, name, create_time
from tablename
where DATEDIFF(dd,create_time ,NOW())=7
order by create_time
limit 50;
0 голосов
/ 07 декабря 2011
SELECT * 
FROM `table` 
WHERE `create_time` >= DATE_SUB(now(), INTERVAL 7 DAY) 
LIMIT 50;
0 голосов
/ 07 декабря 2011
select count(id), name
from tablename
where DATE_SUB(NOW(), INTERVAL 7 DAY) < create_time 
group by name
order by count(id) desc
limit 50;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...