Группа по дате в столбце, в котором хранится временная метка в long(bigint)

#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 — общее количество строк таблицы.