我有一张这样的表:
id | date
---- | -----------
1 | 1319043263
2 | 1319043578
哪个日期字段格式在epoch中。我必须对属于同一天的每一行进行分组,并将它们显示在一个单独的组中。我怎么能在MySQL中做到这一点?
感谢。
答案 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()。
答案 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;