#mysql #hibernate #datetime #group-by #timestamp
#mysql #спящий режим #дата и время #группировать по #временная метка
Вопрос:
Я хочу получать количество из таблицы за день, но столбец времени находится в long, поэтому я не могу просто сгруппировать по столбцу времени. Я должен группировать по дате в столбце времени. Как я могу это сделать?
Таблица:
Column | type
----------------
id | Long (bigint)
name | String (varchar)
time | Long (bigint)
Я попробовал выполнить следующий запрос, но он не работает, так как у меня есть время в long, и я хочу сгруппировать по дате.
select time,count(*) from my_table mt group by time;
Как я могу сгруппировать по дате в приведенном выше запросе?
Еще одна вещь, я собираюсь использовать этот запрос в гибернации, поэтому нужен запрос, который также может быть написан на hql.
Ответ №1:
Прежде всего, мы преобразуем нашу временную метку в дату, а затем сгруппируем по дате!
select mt.time,count(*) from my_table mt group by DATE( FROM_UNIXTIME( mt.time ));
надеюсь, это сработает. приветствие 🙂
Комментарии:
1. Вам нужны обратные тики вместо одинарных кавычек (или вообще без тиков).
2. вы знаете, как сделать то же самое в postgresql?
3. @Harry пожалуйста, используйте «:: date», кроме функции from_unixtime и date, поэтому она станет такой же, как (mt.time::date) P.S: извините, что в настоящее время я не установил postgresql, пожалуйста, проверьте один раз и дайте мне знать в случае каких-либо проблем 🙂
4. @Arians: я попробовал это:
select time::date from my_table;
и он возвращаетERROR: cannot cast type bigint to date
5. @Harry: пожалуйста, не могли бы вы указать, какую версию вы используете?
Ответ №2:
SELECT DATE(FROM_UNIXTIME(`time`)) AS date_from_time, COUNT(1)
FROM my_table
GROUP BY date_from_time
Комментарии:
1. Это не работает. Я получаю результат как
null | 588
. 588 — общее количество строк таблицы.