#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 (), для поля внутри группы.
Комментарии:
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;