6

我有一张这样的桌子:

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

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

谢谢。

4

2 回答 2

15

通过...分组:

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 组函数参考

MySQL 日期和时间函数参考

于 2011-10-19T18:03:35.907 回答
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;
于 2013-06-13T20:21:13.053 回答