【问题标题】:group by month of unix timestamp field按 Unix 时间戳字段的月份分组
【发布时间】:2012-03-30 17:39:51
【问题描述】:

我正在尝试让我的代码以以下格式输出:

january 2012 - 34
february 2012 - 23

其中 34 和 23 将是该月内 id_dealership 为 7 的总行数。我需要它来输出曾经进行分配的每个月的所有数据。

assignments表结构如下:

id_dealer (int)
date_assigned (int)

我试过了,但它根本不起作用:

SELECT MONTH(date_assigned), YEAR(date_assigned), COUNT(*)
FROM assignments
GROUP BY MONTH(date_assigned), YEAR(date_assigned)

【问题讨论】:

    标签: mysql select count unix-timestamp


    【解决方案1】:

    您的 date_assigned 列应为 DATE 类型。 AFAIK MONTH 适用于日期列 如果您想要 DATE 列中的月份名称,请使用:MONTHNAME(date_assigned)

    【讨论】:

    • 这不是问题的完美解决方案,但很有用。
    【解决方案2】:
    SELECT 
      MONTH(FROM_UNIXTIME(date_assigned)), 
      YEAR(FROM_UNIXTIME(date_assigned)), 
      COUNT(*)
    FROM assignments
    GROUP BY 
      MONTH(FROM_UNIXTIME(date_assigned)), 
      YEAR(FROM_UNIXTIME(date_assigned))
    

    【讨论】:

    • 你能看看这个吗 - stackoverflow.com/questions/9699533/…
    • 哇,我不认为这是可能的。赞一个!
    • 我怎样才能得到带有月份名称的输出,例如月份 = JAN & sales =20
    【解决方案3】:

    试试这个查询

    SELECT 
      MONTH(FROM_UNIXTIME(date_assigned)), 
      YEAR(FROM_UNIXTIME(date_assigned)), 
      COUNT(*)
    FROM assignments
    GROUP BY 1,2
    

    【讨论】:

    • 你能解释一下这个查询是如何工作的吗
    【解决方案4】:

    对于希望输出 DATETIME 而不是月/年组合的人,这里有另一种解决问题的方法。使用DATETIME 的好处是它可以很容易地插入到数据可视化库和工具中。

    SELECT 
        LAST_DAY(FROM_UNIXTIME(date_assigned)), 
        COUNT(*)
    FROM assignments
    GROUP BY 1
    ORDER BY 1 DESC
    

    LAST_DAY() 函数返回给定 DATEDATETIME 值的月份的最后一天。如果您想抢占第一天,您可以选择这个:ADDDATE(LAST_DAY(SUBDATE(FROM_UNIXTIME(date_assigned), INTERVAL 1 MONTH)), 1)。它在最后一个日期上加一天,然后减去一个月。

    1 值是列位置整数 - 简写,因此我们不必输入更多的 LAST_DAY(FROM_UNIXTIME(date_assigned))(它们从 1 开始,而不是 0)。

    示例输出:

    |-------------------------------------------|------------------|
    | LAST_DAY(FROM_UNIXTIME(date_assigned))    | COUNT(*)         |
    |-------------------------------------------|------------------|
    | September 30, 2020, 12:00 AM              | 34               |
    |-------------------------------------------|------------------|
    | August 31, 2020, 12:00 AM                 | 23               |
    |-------------------------------------------|------------------|
    

    【讨论】:

      猜你喜欢
      • 2014-05-31
      • 2013-08-07
      • 2012-04-17
      • 1970-01-01
      • 1970-01-01
      • 2015-12-24
      • 2018-04-05
      • 1970-01-01
      • 2018-03-07
      相关资源
      最近更新 更多