按 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()
函数返回给定 DATE
或 DATETIME
值的月份的最后一天。如果您想抢占第一天,您可以选择这个: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 时间戳字段的月份分组的主要内容,如果未能解决你的问题,请参考以下文章
Python Pandas:按日期分组,并按时间戳访问每个组