alexsobolenko
@alexsobolenko
Программист

Как сгруппировать выбранные данные по дате (timestamp)?

Мне нужно подсчитать записи, сгруппированные по дате (поле имеет тип `TIMESTAMP` в базе данных). Я написал код
sql = "
    SELECT COUNT(id) AS cnt, TO_CHAR(closed_on, 'YYYY-mm-dd') AS closed_on, issues.status_id
    FROM issues
    WHERE closed_on IS NOT NULL AND closed_on <= '#{end_from_created_date}'
    AND created_on <= '#{end_from_created_date}'
    GROUP BY closed_on, status_id
"

Этот запрос работает на postrgesql, но не работает на sqlite, потому что у sqlite нет функции `TO_CHAR`. Решение должно быть совместимо с mysql, postgresql, sqlite.

В принципе, можно использовать разные sql для разных БД, но это не очень хорошая идея.

Может быть, я могу использовать функции из `ActiveRecord`, но я не нашел решения в документации
  • Вопрос задан
  • 192 просмотра
Решения вопроса 1
@xdef42
Вам же группировка по дате нужна? Используйте функцию DATE
"The DATE() function extracts the date part from a datetime expression."

SELECT COUNT(id) AS cnt, DATE(closed_on) AS closed_on, issues.status_id
FROM issues
WHERE closed_on IS NOT NULL AND closed_on <= '#{end_from_created_date}'
AND created_on <= '#{end_from_created_date}'
GROUP BY DATE(closed_on), status_id
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы