Как ограничить результаты по сумме - PullRequest
2 голосов
/ 14 марта 2010

У меня есть таблица событий под названием event. Для целей этого вопроса у него есть только одно поле с именем date.

Следующий запрос возвращает мне число событий, которые происходят в каждую дату в течение следующих 14 дней:

SELECT 
   DATE_FORMAT( ev.date, '%Y-%m-%d' ) as short_date,
   count(*) as date_count
FROM event ev
WHERE ev.date >= NOW()
GROUP BY short_date
ORDER BY ev.start_date ASC
LIMIT 14

Результат может быть следующим:

+------------+------------+
| short_date | date_count |
+------------+------------+
| 2010-03-14 |          1 | 
| 2010-03-15 |          2 | 
| 2010-03-16 |          9 | 
| 2010-03-17 |          8 | 
| 2010-03-18 |         11 | 
| 2010-03-19 |         14 | 
| 2010-03-20 |         13 | 
| 2010-03-21 |          7 | 
| 2010-03-22 |          2 | 
| 2010-03-23 |          3 | 
| 2010-03-24 |          3 | 
| 2010-03-25 |          6 | 
| 2010-03-26 |         23 | 
| 2010-03-27 |         14 | 
+------------+------------+
14 rows in set (0.06 sec)

Допустим, я хочу отобразить эти события по дате. В то же время я хочу отображать максимум 10 одновременно. Как бы я это сделал?

Почему-то мне нужно ограничить этот результат суммой поля date_count, но я не знаю как.

Кто-нибудь сталкивался с этой проблемой раньше?

Любая помощь будет оценена. Спасибо

Отредактировано: Дополнительное требование (крайне важное, упс), которое я забыл в своем первоначальном посте, состоит в том, что я хочу только целые дни. то есть. Учитывая ограничение 10, он будет возвращать только следующие строки:

+------------+------------+
| short_date | date_count |
+------------+------------+
| 2010-03-14 |          1 | 
| 2010-03-15 |          2 | 
| 2010-03-16 |          9 | 
+------------+------------+

Ответы [ 2 ]

3 голосов
/ 14 марта 2010
  1. использовать функцию даты для ограничения 14-дневного диапазона дат
  2. используйте лимит для отображения первых 10

SELECT 
   DATE_FORMAT( ev.date, '%Y-%m-%d' ) as short_date,
   count(*) as date_count
FROM event ev
WHERE ev.date between NOW() and date_add(now(), interval 14 day)
GROUP BY date(short_date)
ORDER BY ev.start_date ASC
LIMIT 0,10
1 голос
/ 14 марта 2010

Я думаю, что использование LIMIT 0, 10 будет работать для вас.

...