время эпохи и запрос MySQL

#mysql #epoch

#mysql #эпоха

Вопрос:

У меня есть такая таблица:

 id   | date
---- | -----------
1    | 1319043263
2    | 1319043578
  

какой формат поля даты находится в эпохе. Я должен сгруппировать каждую строку, относящуюся к тому же дню, и показать их в отдельной группе. Как я могу это сделать в MySQL?

Спасибо.

Ответ №1:

Группировать по:

 SELECT COUNT(`id`) AS `Records`, DATE(FROM_UNIXTIME(`date`)) AS `Date` 
FROM `table`
GROUP BY DATE(FROM_UNIXTIME(`date`))
  

Вывод:

     Records | Date
--------------------------------
      10    | 2011-10-19
      10    | 2011-10-18
  

Порядок по:

 SELECT `id`, FROM_UNIXTIME(`date`) AS `Date`
FROM `table`
ORDER BY DATE(FROM_UNIXTIME(`date`)) [ASC|DESC]
  

(Хотя на самом деле вы получите тот же порядок, используя только FROM_UNIXTIME() или необработанное date значение, поскольку все они будут правильно складываться при попытке упорядочения)

Вывод:

       id    | Date
--------------------------------
      03    | 2011-10-19 12:00:00
      02    | 2011-10-18 12:00:00
      01    | 2011-10-17 12:00:00
  

Это преобразует временную метку unix в mysql datetime, а затем извлекает значение даты из значения, которое применяется к предложению группировки или порядка

Если вы хотите сгруппировать по дням независимо от месяца и года, используйте DAY() вместо DATE()

Однако не могли бы вы расширить часть о «группировании каждой строки по дням». какой результат вы хотите показать? когда вы группируете что-то, вы используете какой-то агрегированный процессор, такой как COUNT () или SUM (), для поля внутри группы.

Ссылка на функции группы MySQL

Ссылка на функцию даты и времени MySQL

Комментарии:

1. Я хочу сгруппировать каждую строку, относящуюся к одному и тому же дню, которая уникальна.

2. Хорошо, тогда вы ищете предложение ORDER BY

3. Извините, я, наверное, не понимаю, не могли бы вы добавить пример желаемого результата?

Ответ №2:

Думаю, что это довольно похоже на это, учитывая требования к группировке.

Просто добавил MIN / MAX в качестве примера для агрегации домена.

 SELECT
  DATE(FROM_UNIXTIME(`epoch`)) AS `GroupedDate`,
  MIN(FROM_UNIXTIME(`epoch`)) AS `DayStart`,
  MAX(FROM_UNIXTIME(`epoch`)) AS `DayEnd`
FROM
  `timestamps`
GROUP BY
  DATE(FROM_UNIXTIME(`epoch`))
ORDER BY
   `epoch` ASC;