【问题标题】:epoch time and MySQL query纪元时间和 MySQL 查询
【发布时间】:2011-12-11 03:54:37
【问题描述】:

我有一张这样的桌子:

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

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

谢谢。

【问题讨论】:

    标签: mysql epoch


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

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

    但是,您能否扩展一下“按天对每一行进行分组”的部分。你想显示什么结果?当您对某事物进行分组时,您会在组内的某个字段上使用某种聚合处理器,例如 COUNT() 或 SUM()。

    MySQL Group Functions Reference

    MySQL Date & Time Function Reference

    【讨论】:

    • 我想对属于同一天的每一行进行分组,这是唯一的。
    • 好的,那么您正在寻找一个 ORDER BY 子句
    • 对不起,我想我不明白,你能添加一个你想要的输出示例吗?
    【解决方案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;
    

    【讨论】:

      猜你喜欢
      • 2017-10-10
      • 2011-04-27
      • 2011-11-26
      • 2018-01-17
      • 1970-01-01
      • 1970-01-01
      • 2011-09-24
      • 2016-01-22
      • 2012-10-06
      相关资源
      最近更新 更多