按 Unix 时间戳字段的月份分组

Posted

技术标签:

【中文标题】按 Unix 时间戳字段的月份分组【英文标题】:group by month of unix timestamp field 【发布时间】: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)

【问题讨论】:

【参考方案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))

【讨论】:

你能看看这个吗 - ***.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               |
|-------------------------------------------|------------------|

【讨论】:

以上是关于按 Unix 时间戳字段的月份分组的主要内容,如果未能解决你的问题,请参考以下文章

在php中获取给定月份和年份的开始和结束unix时间戳

Flutter:按时间戳查询 Firestore 文档

获取分组的第一个和最后一个时间戳之间另一个字段的差异

Python Pandas:按日期分组,并按时间戳访问每个组

努力从 BigQuery SQL 中的时间戳字段中提取特定月份的 DATE

Pandas DataFrame 按时间戳分组