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")
在我的 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")