SQL 查询统计每月行数,数据采用 Unix 时间戳格式

SQL query to count the number of rows per month with data in Unix TimeStamp format

在我的 Mysql 数据库中,我有一列以 Unix TimeStamp(类型 / BigInt,毫秒)存储日期值。我需要编写一个查询来计算每个月的行数(无论年份)。

Table:

    +-------+----------------+
    |   id  |    Startdata   |
    +-------+----------------+
    |     1 |  1580841222491 |  
    |     2 |  1580841235885 |  
    |     3 |  1580841235872 |  
    |     4 |  1580843242865 |  
    |     5 |  1580841134857 | 
    |     6 |  1580841334855 | 
    |     7 |  1580842252695 | 
    |     8 |  1580844236845 | 
       ...         ... 
    +-------+----------------+

想要return:

+-------+-------+
| count | month |
+-------+-------+
|     4 |     1 |  
|     1 |     2 |  
|     6 |     3 |  
|    51 |     4 |  
|    21 |     5 | 
|    29 |     6 | 
|    41 |     7 | 
|    18 |     8 | 
|    21 |     9 | 
|    11 |    10 | 
|    38 |    11 |
|    23 |    12 |
+-------+-------+

函数UNIX_TIMESTAMP不起作用

你可以试试下面的-

select month(date(from_unixtime(floor(Startdata/1000)))) as month_value,count(*) as cnt
from tablename
group by month(date(from_unixtime(floor(Startdata/1000))))

注意:如果您的 MySql 版本是 8+,那么您不需要 floor 函数

table 中的 Startdata 列以毫秒为单位,因此您需要将其除以 1000 才能转换为秒。所以查询将是:

SELECT 
    COUNT(*) AS `count`, 
    MONTH(FROM_UNIXTIME(Startdata/1000)) AS `month`
FROM `mytable`
GROUP BY `month`;

实例here

from_unixtime 也允许您指定输出格式。在您的情况下,%m 就是您所需要的。

select from_unixtime(Startdata/1000,"%m"), count(*)
from t
group by from_unixtime(Startdata/1000,"%m")