Задать вопрос

GROUP BY weeks; Как вывести диапазон?

SELECT
  DATE_FORMAT(`start_date`, '%x-%v') weeks,
  COUNT(*)
FROM `events` GROUP BY weeks;


Выводит в формате [2011-05, 34], то есть год, номер недели и количество событий. Нужно же вывести что-то вроде [2011-01-31 – 2011-02-06, 34].

Есть вариант обработать это на стороне приложения, но хотелось бы все же оставить это SQL'у.
  • Вопрос задан
  • 3387 просмотров
Подписаться 7 Оценить Комментировать
Решения вопроса 1
@Placido
Такой вариант:

SELECT
  DATE_FORMAT(`start_date`, '%x-%v') weeks,
  COUNT(*), DATE_ADD(`start_date`, INTERVAL(2-DAYOFWEEK(`start_date`)) DAY) first_date,
    DATE_ADD(`start_date`, INTERVAL(8-DAYOFWEEK(`start_date`)) DAY) last_date
FROM `events` GROUP BY weeks;
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@pihel
Sql, Oracle, pl/sql, BI, ETL, php, olap
Так не получится?
SELECT
  DATE_FORMAT(`start_date`, '%x-%v') weeks,
  MAX(`start_date`), MIN(`start_date`)
  COUNT(*)
FROM `events` GROUP BY weeks;
Ответ написан
EndUser
@EndUser
Группируете со строкам — имхо медленновато будет.
Если в локалке, я бы прохронометрировал так: формировать строку недели, числовой номер недели, счётчик; группировал бы по числовому номеру недели, в приложении отбирал бы две колонки.
Если нагрузка на сеть будет из-за числового номера недели слишком большой, оставил бы как у вас, разве что формат строки поменял бы на необходимый вам.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы