我有一张这样的桌子:
id | date
---- | -----------
1 | 1319043263
2 | 1319043578
哪个日期字段格式在纪元中。我必须对属于同一天的每一行进行分组,并将它们显示在一个单独的组中。我怎样才能在 MySQL 中做到这一点?
谢谢。
通过...分组:
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()。
考虑到分组的要求,认为它就像那样。
刚刚添加了 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;