纪元时间和MySQL查询

时间:2011-10-19 17:52:00

标签: mysql epoch

我有一张这样的表:

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

哪个日期字段格式在epoch中。我必须对属于同一天的每一行进行分组,并将它们显示在一个单独的组中。我怎么能在MySQL中做到这一点?

感谢。

2 个答案:

答案 0 :(得分:14)

分组依据:

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日期时间,然后从应用于分组或订单子句的日期值中提取日期值

如果您想按天分组而不管月份和年份使用DAY()而不是DATE()

但是你可以扩展关于“每天分组”的部分。你想要展示什么结果?当你对某些东西进行分组时,你会在组中的某个字段上使用某种聚合处理器,如COUNT()或SUM()。

MySQL Group Functions Reference

MySQL Date & Time Function Reference

答案 1 :(得分:1)

考虑到分组的要求,认为它更像是这样。

刚刚添加了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;